C++从内存中加载映像(EXE/DLL)到本地或者远程进程执行

来源:互联网 发布:撤销网络问政的投诉 编辑:程序博客网 时间:2024/06/02 07:27

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