开发者

C++ How to control Image Base of LoadLibrary API

开发者 https://www.devze.com 2023-04-04 07:17 出处:网络
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

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号