被加载的映像如果是EXE比必须关闭 固定基址(/FIXED:NO)即必须有重定位表, 否则无法处理重定位.
void load_image()
{
auto pImage = data;//欲加载映像的内存地址
void *pDest = NULL;
HANDLE pSection;
LdrSup::AlignSections32(&pSection, pDest, pImage, false);
LdrSup::RelocateImage32(pDest);
LdrSup::FixImports(pDest, false);
Threading::Thread *thread = new Threading::Thread(
LdrSup::RunImage(AppBase::GetCurrentProcess(), pDest, (DWORD)0x00001000/*EntryPoint, 须自己读取, 此处省略*/)
, 0, FALSE
);
thread->Wait();
delete thread;
LdrSup::CloseNativeHandle(pSection);
}
相关参考
http://www.oschina.net/code/snippet_551551_12219
注意, LdrSup已经不再更新, 建议使用CppMemoryModule
http://code.google.com/p/cppmemorymodule/
本文介绍了一个用于加载EXE映像的过程,并强调了关闭固定基址及处理重定位的重要性。通过示例代码展示了如何进行内存对齐、重定位处理、导入修复等步骤。同时推荐使用更现代的CppMemoryModule替代LdrSup。

1190

被折叠的 条评论
为什么被折叠?



