对主程序重新设置基准之后,它会在自己的图像库中很高的位置。

我如何保证要加载的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/

10-11 22:09