idk what the default should be or if anything is not working as expected but i use -Wl,--dynamicbase to get a pass in the windows app cert kit regarding ASLR
On Sat, Jan 7, 2017 at 4:19 AM Linda Zhang <lind...@qq.com> wrote: > OS: Win7 SP1 > Toolchain: Mingw-w64 i686-6.2.0-release-win32-dwarf-rt_v5-rev1 > GCC: 4.8.x - 6.2.0 > Binutils: 2.21 - 2.25.1 > MinGW: official and w64, 4.x - 5.0.1 > Threading and except: all (dw2/sjlj/seh + win32/posix) > > Consider a dll whose base address is overlapped with an existing module, > so that the operating system must relocate it, or for another word, rebase > it, to work. Relocation is the fundamental part of the security feature > ASLR and is enabled by default since Windows Vista. When ASLR is enabled, > all executables are relocated. > > BUT, After relocation, the compiled DLL fails to load at all. That's to > say, the compiled DLL is broken. > > Minimal case: > ===================== > testexe.c > ===================== > #include <stdio.h> > __declspec(dllimport) int a(); > int main() { > a(); > printf("hello world\n"); > return 0; > } > > ===================== > testdll.c > ===================== > __declspec(dllexport) int a() {return 0;} > > ===================== > test.def > ===================== > EXPORTS > a > > ===================== > makefile > ===================== > all: test.dll test.exe > clean: > rm test.exe test.dll libtest.a > test.exe: testexe.c > gcc -o $@ $^ libtest.a -Wl,--image-base,0x400000 > test.dll: testdll.c > dllwrap -o $@ $^ --def test.def --implib libtest.a > -Wl,--image-base,0x400000 > > ===================== > Case end. Also see the attachment. In this case, test.exe refuses to work > with error 0xC0000005 because test.dll fails to load. > > Not only x86-dw2 builds produces the broken DLL, but x86-sjlj, x64-sjlj, > x64-seh, all builds since 2010, that's to say, gcc 4.8.x to 6.2 with > binutils 2.21 to 2.25.1, have the same problem. OH MY GOD. > > For I know, the only working MinGW bundle is the version comes with > Dev-C++ 4.9.9.2 in 2005 (GCC 3.4.2 + binutils 2.15.91 + original MinGW32 + > dw2 + win32). > > Nothing is wrong when using Microsoft Visual C++. > > I don't know what's wrong, GCC or binutils?. I can't submit bug to GCC > bugzilla because it is rejecting new account creation. It's really annoying > to see GCC produced broken DLLs and showing 0xC0000005 frequently and > randomly. Could anyone help me? > > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, SlashDot.org! http://sdm.link/slashdot > _______________________________________________ > Mingw-w64-public mailing list > Mingw-w64-public@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/mingw-w64-public > ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public