Search code examples
c++winapiloadlibraryrelocation

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 that 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?


Solution

  • 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.