📄 memedit.cpp
字号:
// MemEdit.cpp : implementation file
//
#include "winbase.h"
#include "stdafx.h"
#include "MemEdit.h"
#include "GameMaster.h"
extern HANDLE hProcess;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BOOL g_BlockModified;//
BYTE g_BlockBuffer[256];//
/////////////////////////////////////////////////////////////////////////////
// MemEdit dialog
MemEdit::MemEdit(CWnd* pParent /*=NULL*/)
: CDialog(MemEdit::IDD, pParent)
{
//{{AFX_DATA_INIT(MemEdit)
m_strMemAddr = _T("");
m_dwbaseAddr = 0x00100000;
m_strMemValue = _T("");
m_strASCIIValue = _T("");
//}}AFX_DATA_INIT
}
void MemEdit::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(MemEdit)
DDX_Control(pDX, IDC_EDIT_ASCII, m_ASCIIValue);
DDX_Control(pDX, IDC_EDIT_HEXVALUE, m_hexValue);
DDX_Control(pDX, IDC_EDIT_HEXADDR, m_memAddr);
DDX_Text(pDX, IDC_EDIT_HEXADDR, m_strMemAddr);
DDX_Text(pDX, IDC_EDIT_MEMADDR, m_dwbaseAddr);
DDX_Text(pDX, IDC_EDIT_HEXVALUE, m_strMemValue);
DDX_Text(pDX, IDC_EDIT_ASCII, m_strASCIIValue);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(MemEdit, CDialog)
//{{AFX_MSG_MAP(MemEdit)
ON_EN_VSCROLL(IDC_EDIT_HEXADDR, OnVscrollEditHexaddr)
ON_EN_VSCROLL(IDC_EDIT_HEXVALUE, OnVscrollEditHexvalue)
ON_EN_VSCROLL(IDC_EDIT_ASCII, OnVscrollEditAscii)
ON_BN_CLICKED(IDC_BTN_MEMREAD, OnBtnMemread)
ON_BN_CLICKED(IDC_BTN_MEMWRITE, OnBtnMemwrite)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// MemEdit message handlers
void MemEdit::OnVscrollEditHexaddr()
{
int nIndex= m_memAddr.GetFirstVisibleLine()-m_nLine;
m_nLine=m_memAddr.GetFirstVisibleLine();
m_hexValue.LineScroll(nIndex);
m_ASCIIValue.LineScroll(nIndex);
}
void MemEdit::OnVscrollEditHexvalue()
{
int nIndex= m_hexValue.GetFirstVisibleLine()-m_nLine;
m_nLine=m_hexValue.GetFirstVisibleLine();
m_memAddr.LineScroll(nIndex);
m_ASCIIValue.LineScroll(nIndex);
}
void MemEdit::OnVscrollEditAscii()
{
int nIndex= m_ASCIIValue.GetFirstVisibleLine()-m_nLine;
m_nLine=m_ASCIIValue.GetFirstVisibleLine();
m_hexValue.LineScroll(nIndex);
m_memAddr.LineScroll(nIndex);
}
void MemEdit::OnBtnMemread()
{
UpdateData( TRUE );
memset(g_BlockBuffer,0,sizeof(g_BlockBuffer));
m_strMemAddr = "";
m_strMemValue = "";
m_strASCIIValue = "";
/* HANDLE hProcess = OpenProcess(
PROCESS_ALL_ACCESS,
FALSE,
ProcId
);
*/
if(hProcess==INVALID_HANDLE_VALUE)
{
AfxMessageBox(" hProcess==INVALID_HANDLE_VALUE !");
return;
}
DWORD NumberOfBytesRead;
BOOL bOk=ReadProcessMemory(hProcess,
(LPVOID)m_dwbaseAddr,
g_BlockBuffer,
256,
&NumberOfBytesRead);
if(bOk==FALSE)
{
AfxMessageBox("ReadProcessMemory Failed!");
return;
}
CString csTemp;
char chTemp;
if(bOk)
{
for(int i=0;i<32;i++)
{
csTemp.Format("0x%p \n",m_dwbaseAddr+i*8);//Edit 1
m_strMemAddr+=csTemp;
for(int j=0;j<8;j++)
{
csTemp.Format("%02x ", g_BlockBuffer[i*8+j]);//Edit 2
m_strMemValue +=csTemp;
chTemp=g_BlockBuffer[i*8+j] ? g_BlockBuffer[i*8+j]:'.';
csTemp.Format("%c ",chTemp);
m_strASCIIValue +=csTemp;
if(j==7)
{
m_strMemValue+="\n";
m_strASCIIValue+="\n";
}
}
}
UpdateData(false);
}
// CloseHandle(hProcess);
}
void MemEdit::OnBtnMemwrite()
{
//Write g_buffer[256] back to the memory
if(g_BlockModified)
{
// CTask m_Task;//............Must..to..be..Modefied........................
// HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcId);
DWORD NumberOfBytesWrite;
int bOk=WriteProcessMemory(hProcess,
(LPVOID)m_dwbaseAddr,
g_BlockBuffer,
sizeof(g_BlockBuffer),
&NumberOfBytesWrite);
if(!bOk)
{
AfxMessageBox( "Write memory Error!");
}
// CloseHandle(hProcess);
}
OnBtnMemread();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -