对主程序重新设置基准之后,它会在自己的图像库中很高的位置。
我如何保证要加载的dll将在0x400000中加载
dllImageBase = LoadLibrary("test.dll");
printf("imagebase = 0x%x", dllImageBase);
我总是得到0x460000而不是0x400000
我需要我的dll第一条指令从0x401000开始,它在重新定级前曾经从0x600000开始
链接器重新设置基准的命令是
#pragma comment( linker, "/BASE:8000000")
所以0x400000现在实际上是免费的,但是默认情况下它不使用它。.所以我可以控制它的任何方式将其重新放置。一些WIN32API也许?
最佳答案
您将必须禁用“地址空间布局随机化”以将DLL加载到所需的位置。此功能旨在阻止您尝试执行的操作。/DYNAMICBASE链接器选项。当我尝试加载为0x400000时可以工作。
关于C++如何控制LoadLibrary API的图像库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7380227/