有很多时候,一个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)

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