C++ How to control Image Base of LoadLibrary API
After Rebasing the main program very high up in it's own imagebase.
How do I guarantee that the dll tha开发者_JAVA技巧t gets loaded will load in 0x400000
dllImageBase = LoadLibrary("test.dll");
printf("imagebase = 0x%x", dllImageBase);
I always get 0x460000 instead of 0x400000
I need my dll first instruction to start from 0x401000, it used to start at 0x600000 before rebasing
Command for linker to rebase is
#pragma comment( linker, "/BASE:8000000")
So 0x400000 is actually free right now yet it doesn't use it by default.. so any way I can control it, where it should relocate. Some WIN32API maybe?
You are going to have to disable Address Space Layout Randomization to get the DLL loaded where you want it. A feature designed to stop you from what you are trying to do. /DYNAMICBASE linker option. Loading at 0x400000 worked when I tried it.
Never rely on a DLL loading at a specific base. If you could force DLLs to load at a specific base then you are opening a potential security hole.
If you have a map file you know what the offset of a given function is. Therefore you can use GetProcAddress to work out what the base address of the DLL is. This is a far safer way to work even if it means that updating your DLL breaks the code loading the DLL.
精彩评论