一个内存读取的问题?

有时我感觉真的好迷茫 2009-12-08 10:31:02
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个字节呢,那么这个函数不就查找不到这个值吗?能不能具体解释一下,先谢谢了!
...全文
131 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
尘雨 2009-12-09
  • 打赏
  • 举报
回复

if(pdw[0] == dwValue) // 这两个类型都是DWORD,当然只会4个字节一组的比较

根据你的需要,你是希望字节或者两个字节比较吗?如果是,就不要使用DWORD。
字节比较,就用BYTE。
双字节比较,就用WORD.
shdwpirvate 2009-12-09
  • 打赏
  • 举报
回复
楼上的都说完了,这段代码找的就是高位为0的1234。2楼说的对,应该尽量缩小查找的范围。内存里的东西是什么谁也说不好。最好是确定你要找的东西多长,是1 byte 还是word 又或是dword。==只能找到完全一样的值~
  • 打赏
  • 举报
回复
00000000 10000000 00000000 00000001 00000010 ......
假如我查找1(比如它占用两个字节 short,红色部分),那用我上面的那个函数不就查不到了吗,即使我给的查找参数类型是dword,但是内存中的目标数字的存放方式不确定啊?将byte数组转换成dword数组,是不是有问题。
尘雨 2009-12-09
  • 打赏
  • 举报
回复
不对

在内存buffer中,查找一个DWORD,就是4个字节。你总需要一个变量保存你的值,哪怕是一个1,你所用的类型决定字节数,而不是你这个常量值决定

你可以把1保存到BYTE类型,那么就是查找一个字节,保存到short,就是查找2个字节,保存到long,就是4个字节。是类型决定大小,而不是值决定大小。
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 vieri_ch 的回复:]
你用DWORD存放,并进行了强制转换,肯定是4个字节
[/Quote]
我用了DWORD类型来存放要查找的值,但是要查找的值在进程的地址空间中不一定占用4个字节啊,不知我这样说对不对?
nintendo_dskay 2009-12-09
  • 打赏
  • 举报
回复
如果1234是用两个字节来进行存放,那么楼主这个方法就未必可以了,因为1234的高位两个字节未必是0。
按照你的方法只能是高位两字节是0的1234这样的DWORD才能匹配。所以如果楼主可以确定那个数字所占的内存大小,还是最好能够把范围缩小吧,比如找1234用unsigned short。
尘雨 2009-12-08
  • 打赏
  • 举报
回复
你用DWORD存放,并进行了强制转换,肯定是4个字节

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧