BOOL CompareAPage(DWORD dwBaseAddr, DWORD dwValue)
{
// 读取1页内存
BYTE arBytes[4096];
if(!::ReadProcessMemory(g_hProcess, (LPVOID)dwBaseAddr, arBytes, 4096, NULL))
return FALSE; // 此页不可读 // 在这1页内存中查找
DWORD* pdw;
for(int i=0; i<(int)4*1024-3; i++)
{
pdw = (DWORD*)&arBytes[i];
if(pdw[0] == dwValue) // 等于要查找的值?
{
if(g_nListCnt >= 1024)
return FALSE;
// 添加到全局变量中
g_arList[g_nListCnt++] = dwBaseAddr + i;
}
} return TRUE;
}
这个函数搜索从dwBaseAddr开始的一页内存值为dwValue的地址并记录到g_arList数组中“pdw = (DWORD*)&arBytes[i];
if(pdw[0] == dwValue)”,这两句不太明白,把arBytes数组中索引为i的值的地址赋给pdw,然后pdw[0]这个表示什么?按结果分析它的意思肯定是arBytes[i];arBytes[i+1];arBytes[i+2];arBytes[i+3];这四个BYTE组合成的DWORD型的值吧,为什么这样表示?
{
// 读取1页内存
BYTE arBytes[4096];
if(!::ReadProcessMemory(g_hProcess, (LPVOID)dwBaseAddr, arBytes, 4096, NULL))
return FALSE; // 此页不可读 // 在这1页内存中查找
DWORD* pdw;
for(int i=0; i<(int)4*1024-3; i++)
{
pdw = (DWORD*)&arBytes[i];
if(pdw[0] == dwValue) // 等于要查找的值?
{
if(g_nListCnt >= 1024)
return FALSE;
// 添加到全局变量中
g_arList[g_nListCnt++] = dwBaseAddr + i;
}
} return TRUE;
}
这个函数搜索从dwBaseAddr开始的一页内存值为dwValue的地址并记录到g_arList数组中“pdw = (DWORD*)&arBytes[i];
if(pdw[0] == dwValue)”,这两句不太明白,把arBytes数组中索引为i的值的地址赋给pdw,然后pdw[0]这个表示什么?按结果分析它的意思肯定是arBytes[i];arBytes[i+1];arBytes[i+2];arBytes[i+3];这四个BYTE组合成的DWORD型的值吧,为什么这样表示?
解决方案 »
- 我的SQL语句面试题,我是蒙了,大家来看看
- 为什么我的DllMain中的DLL_PROCESS_ATTACH没有执行?
- 高手请进:商业软件界面开发
- 如何知道窗口的焦点在哪一个控件上呢?
- 显示位图后出现内存不足问题
- 有关建立splash screen的问题
- 请大家帮帮忙,帮我看一下这道题,谢谢
- 我的WIN2000在关闭IE页面时总是出现读盘的现象,好像很大的工作量?
- 救命的问题,我的CFormView上的控件CCombobox,Clist为何不能操作了?
- 如何在MFC中读取txt中的数据?
- 很多win32应用软件的日志或是配置文件都是用.db文件保存,这是什么数据库
- 关于dll.h文件中声明后发生重定义的问题
if(*((DWORD *)(arBytes + i)) == dwValue)