Контрольная сумма отличается тем, что dll нужно загружать по разным адресам друг от друга, чтобы избежать коллизий во время разветвления.
Адреса загрузки отличаются от тех, которые записаны в DLL во время сборки.
Вы можете увидеть адрес загрузки с rebase
$ rebase -si | head -n 5
/usr/libexec/coreutils/libstdbuf.so base 0x0003781a0000 size 0x0000c000
/usr/lib/zsh/5.5.1/zsh/zutil.dll base 0x0003781b0000 size 0x0000f000
/usr/lib/zsh/5.5.1/zsh/zselect.dll base 0x0003781c0000 size 0x0000b000
/usr/lib/zsh/5.5.1/zsh/zpty.dll base 0x0003781d0000 size 0x0000c000
/usr/lib/zsh/5.5.1/zsh/zprof.dll base 0x0003781e0000 size 0x0000c000
$ rebase -si | tail -n 5
/usr/bin/cyg4ti2util-0.dll base 0x0003ffe70000 size 0x00018000
/usr/bin/cyg4ti2int64-0.dll base 0x0003ffe90000 size 0x00068000
/usr/bin/cyg4ti2int32-0.dll base 0x0003fff00000 size 0x00069000
/usr/bin/cyg4ti2gmp-0.dll base 0x0003fff70000 size 0x00076000
/usr/bin/cyg4ti2common-0.dll base 0x0003ffff0000 size 0x0000c000
назначение адреса загрузки в каждом dll выполняется скриптом
/etc/postinstall/0p_000_autorebase.dash
, который выполняется Cywin setup
после каждой установки / обновления.