Dear Cygwin team, I’ve found that rebase.exe makes certain assumptions that do not conform to the PE specification.
1. Incorrect handling of COFF File Header position When checking the 'Characteristics' field in the COFF File Header, rebase.exe assumes this field is always at a fixed offset. However, the PE specification states that the COFF File Header is located immediately after the PE signature in the image file. https://cygwin.com/cgit/cygwin-apps/rebase/tree/rebase.c#n1739 At this point, the code should perform a relative seek of 18 bytes, not an absolute seek with SEEK_SET. This causes incompatibility with DLLs linked using LLVM's lld, which uses a PE stub of a different size. As a result, such DLLs cannot be rebased. 2. Limiting file size too conservatively https://cygwin.com/cgit/cygwin-apps/rebase/tree/pechecksum.c#n81 Here, the image size is limited to 1 GiB, while the PE specification allows for up to 2 GiB. Large DLLs with debug information (e.g., `cygLLVM*.dll`, `cygclang-cpp*.dll`, etc.) can easily exceed the 1 GiB limit. I hope these issues can be addressed to improve compatibility with LLVM-based toolchains and enhance the robustness of development workflows. Regards, -- Tomohiro Kashiwada (@kikairoya) -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple