VC++(MFC)实现内存共享小例子

Home / C++ MrLee 2015-3-31 7125

有很多时候,一个DLL文件注入到另外一个程序并要把目标程序的数据传出来怎么办呢?那么就需要实现内存共享,内存共享虽然出现N多年了,但是偶尔要用到还是记录下来。这个技术是微软为了更新系统发明的,哈哈……但是被很多人用来干坏事!
首先简单说下原理,首先创建一个内存空间,然后把这个空间置为可读可写并是共享的一块内存空间,把一些数据就往里面进行写入方便传出来。然后其它程序通过查找系统的共享内存块(名字)找到这块共享的内存再把这里面的值给读出来,哈哈……上源码
程序一:
	//创建一个有名的共享内存
	HANDLE m_hMap = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,
		0,0x100000,"share");//共享区间大小0x100000
	if(m_hMap != NULL)
		MessageBox("内存共享创建成功");
	else
		MessageBox("内存共享创建失败");
	//映射到本进程的地址空间
	m_pMemMap = MapViewOfFile(m_hMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
	if(m_pMemMap == NULL)
		MessageBox("内存映射失败");
	byte *pByte = (byte*)m_pMemMap;
	pByte[0] = 'L';
	pByte[1] = 'e';
	pByte[2] = 'e';
程序二:
	//获得共享内存句柄
	HANDLE m_hMap =OpenFileMapping(FILE_MAP_WRITE,FALSE,"share");
	if (m_hMap != NULL)
	{
		void* m_pMemMap = MapViewOfFile(m_hMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
		byte* pByte = (byte*)m_pMemMap;
		CString text;
		text.Format("%c%c%c",pByte[0],pByte[1],pByte[2]);
		MessageBox(text);
	}
	else
	{
		//未找到共享内存或者打开失败
		MessageBox("未找到共享内存或者打开失败");
	}
最后别忘记了把共享内存给释放掉.
UnmapViewOfFile(m_pMemMap)

QQ截图20150331203311

本文链接:https://www.it72.com/1728.htm

推荐阅读
最新回复 (0)
返回