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) // 等于要查找的值?
{
.....
.....
}
} return TRUE;
}
这个函数是在指定的地址空间中查找一个值 如1234,我的问题是:
在进程地址空间中,值1234是什么类型存放的?是占几个字节?
假如1234是占4个字节,与DWORD一样,那么查找可以成功。但是如果1234占2个字节呢,那么这个函数不就查找不到这个值吗?能不能具体解释一下,先谢谢了!
{
// 读取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) // 等于要查找的值?
{
.....
.....
}
} return TRUE;
}
这个函数是在指定的地址空间中查找一个值 如1234,我的问题是:
在进程地址空间中,值1234是什么类型存放的?是占几个字节?
假如1234是占4个字节,与DWORD一样,那么查找可以成功。但是如果1234占2个字节呢,那么这个函数不就查找不到这个值吗?能不能具体解释一下,先谢谢了!
按照你的方法只能是高位两字节是0的1234这样的DWORD才能匹配。所以如果楼主可以确定那个数字所占的内存大小,还是最好能够把范围缩小吧,比如找1234用unsigned short。
假如我查找1(比如它占用两个字节 short,红色部分),那用我上面的那个函数不就查不到了吗,即使我给的查找参数类型是dword,但是内存中的目标数字的存放方式不确定啊?将byte数组转换成dword数组,是不是有问题。
if(pdw[0] == dwValue) // 这两个类型都是DWORD,当然只会4个字节一组的比较根据你的需要,你是希望字节或者两个字节比较吗?如果是,就不要使用DWORD。
字节比较,就用BYTE。
双字节比较,就用WORD.