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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值