如何控制加载库的图像库API

C++ How to control Image Base of LoadLibrary API

本文关键字:图像 API 加载 何控制 控制      更新时间:2023-10-16

将主程序重新放置在它自己的imagebase中。

我如何保证加载的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链接器选项。

永远不要依赖特定基库的DLL加载。如果你可以强制dll在一个特定的基础上加载,那么你就打开了一个潜在的安全漏洞。

如果你有一个map文件,你知道给定函数的偏移量是多少。因此,您可以使用GetProcAddress来计算DLL的基址是什么。这是一种更安全的工作方式,即使这意味着更新DLL会破坏加载DLL的代码。