被加载的映像如果是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/