首页
社区
课程
招聘
[讨论][求助]readprocessmemory的读取字数问题
发表于: 2015-12-19 15:45 8081

[讨论][求助]readprocessmemory的读取字数问题

2015-12-19 15:45
8081
大家有没有注意到该函数这问题:如果读取的字节数lpNumberOfBytesRead小于nSize,那么函数返回成功还是失败呢?
之所以问这问题,是因为我的一些代码为了方便直接判断函数返回值。我认为返回成功时就一定读取全部了,但担心实际上只部分读取也返回成功,这样我的后面的操作可能会把无效数据当成真实数据来处理
有人知道希望能透露下谢谢

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 209
活跃值: (813)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
检查是否可读:IsBadReadPtr

检查是否可写:IsBadWritePtr
2015-12-19 20:24
0
雪    币: 18
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
lpNumberOfBytesRead不会小于nSize
所以你的问题根本不成立 哈
2015-12-20 12:46
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
IsBadReadPtr和IsBadWritePtr 只能用于本进程,对跨进程的读写操作是没用的
NumberOfBytesRead小于nSize这种情况也是存在的,有一个著名的错误叫“仅完成部分的readprocessmemory 或writeprocessmemory请求”。

楼主其实没必要担心, NumberOfBytesRead = nSize 时,调用一定是成功的。
0 <= NumberOfBytesRead  < nSize 时,可以认为调用是不成功时,此时错误码299,意思就是那个“仅完成部分的readprocessmemory 或writeprocessmemory请求”。

触发这个错误也很简单,比如A进程有一块内存地址为0x100000,大小为0x1000,那么从 0x100000起读一块大小超过0x1000的内存,就会产生这个错误,此时NumberOfBytesRead是0
如果A进程有一块内存地址为0x100000,大小为0x12000,那么从 0x100000起读一块大小为0x18000的内存,也会产生这个错误,此时NumberOfBytesRead不是0,而是0xE000(内核跨进程拷贝内存时的分块大小,此时大小超过一块,但不足两块)
2015-12-20 16:24
0
游客
登录 | 注册 方可回帖
返回
//