|

提醒:若下载的软件是收费的"请不要付款",可能是骗子,请立即联系本站举报,执意要付款被骗后本站概不负责。(任何交易请走第三方中介,请勿直接付款交易以免被骗!切记).
本来想做个控制台,然后把DLL注入游戏,通过控制台和DLL通信挂机,所以自己写了个内存映射实现通信的代码,但发现做起来很麻烦,又要写DLL又要写EXE,很难调试。 ,已经改为远程注入CALL了
下面是代码
EXE中的头文件:
// MemShare.h: interface for the CMemShare class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_MEMSHARE_H__AE687DC1_4358_4382_8404_7F9BEFAE36FE__INCLUDED_)
#define AFX_MEMSHARE_H__AE687DC1_4358_4382_8404_7F9BEFAE36FE__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
struct SData1
{
int IDAta;
int idata1;
};
class CMemShare
{
public:
CMemShare();
virtual ~CMemShare();
void CreatMap(CString MapName);
void WriteMap(SData1 Data,int iLengByte);
void _Init();
void Destory();
protected:
HANDLE m_hFileMap; //创建MAP句柄
HANDLE m_hOpenMap; //打开MAP句柄(没用上)
LPBYTE lpData; //MAP地址指针
};
#endif // !defined(AFX_MEMSHARE_H__AE687DC1_4358_4382_8404_7F9BEFAE36FE__INCLUDED_)
EXE中的代码:
// MemShare.cpp: implementation of the CMemShare class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "内存映射共享结构体.h"
#include "MemShare.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMemShare::CMemShare()
{
_Init();
}
CMemShare::~CMemShare()
{
// Destory();
}
void CMemShare::CreatMap(CString MapName)
{
int iLengByte = sizeof(SData1);
m_hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE|SEC_COMMIT,0,iLengByte,MapName);
if (!m_hFileMap)
{
AfxMessageBox("CreateFileMapping() failed.");
return;
}
return;
}
void CMemShare::WriteMap(SData1 Data,int iLengByte)
{
// LPBYTE lpData;
lpData = (LPBYTE)MapViewOfFile(m_hFileMap,FILE_MAP_WRITE,0,0,0);
if (lpData==NULL)
{
AfxMessageBox("MapViewOfFile() failed.");
CloseHandle(m_hFileMap);
m_hFileMap=NULL;
return;
}
SData1 *psd=(SData1*)lpData;
psd->idata=Data.idata;
psd->idata1=Data.idata1;
}
void CMemShare::_Init()
{
m_hFileMap=NULL;
lpData=NULL;
}
void CMemShare::Destory()
{
if (m_hFileMap!=NULL)
{
UnmapViewOfFile(lpData);
lpData = NULL;
CloseHandle(m_hFileMap);
m_hFileMap = NULL;
}
}
DLL中的头文件:
// ShareMem.h: interface for the CShareMem class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SHAREMEM_H__3D5627C2_F663_4A08_85A6_FCD272EBDA02__INCLUDED_)
#define AFX_SHAREMEM_H__3D5627C2_F663_4A08_85A6_FCD272EBDA02__INCLUDED_
#include "测试进程Dlg.h"
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
typedef struct tagSDATA1
{
int idata;
int idata1;
}SData1,*SDATA1;
class CShareMem
{
public:
CShareMem();
virtual ~CShareMem();
void OpenMap(CString MapName);
void ReadMap(SData1* psd);
void CloseMap();
protected:
HANDLE m_hOpenMap;//打开MAP句柄
LPBYTE lpReadData;//MAP地址指针
};
#endif // !defined(AFX_SHAREMEM_H__3D5627C2_F663_4A08_85A6_FCD272EBDA02__INCLUDED_)
DLL中的代码
// ShareMem.cpp: implementation of the CShareMem class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "测试进程.h"
#include "ShareMem.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CShareMem::CShareMem()
{
}
CShareMem::~CShareMem()
{
}
void CShareMem::OpenMap(CString MapName)
{
m_hOpenMap=OpenFileMapping(FILE_MAP_READ,FALSE,MapName);
if (m_hOpenMap==NULL)
{
AfxMessageBox("OpenFileMapping() failed.");
return;
}
return;
}
void CShareMem::ReadMap(SData1* psd)
{
lpReadData=(LPBYTE)MapViewOfFile(m_hOpenMap,FILE_MAP_READ,0,0,0);
if (lpReadData==NULL)
{
AfxMessageBox("MapViewOfFile() failed.");
return;
}
SData1 *pData=(SData1*)lpReadData;
psd->idata=pData->idata;
psd->idata1=pData->idata1;
}
void CShareMem::CloseMap()
{
UnmapViewOfFile(lpReadData);
lpReadData = NULL;
CloseHandle(m_hOpenMap);
m_hOpenMap = NULL;
}
联系我时,请说是在 挂海论坛 上看到的,谢谢! |
上一篇: PHP网络验证1.0下一篇: c#发包例子
免责声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。一切关于该内容及资源商业行为与www.52ghai.com无关。
2、本站提供的一切资源内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
3、本站信息来自第三方用户,非本站自制,版权归原作者享有,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
4、如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵犯你版权的,请邮件与我们联系删除(邮箱:xhzlw@foxmail.com),本站将立即改正。
|