如何判断一个指针是否有效?

antFightWithElephant 2012-08-21 08:41:06
我的目的是在远程注入一个进程,读取一段内存的数据,但是这段内存每次大小都会动态改变,但是都不会超过某个数值.
所以我遍历到这个数值为止.
问题是:如果当前的大小比这个固定数值小,我就可能会访问到野指针,然后目标进程就会崩溃.
各位有什么好方法?
...全文
873 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
谢谢各位
zhanshen2891 2012-08-22
  • 打赏
  • 举报
回复
可以用异常处理啊,就是对访问那段内存的代码加上异常处理。
w_xei 2012-08-22
  • 打赏
  • 举报
回复
如果不能用汇编重写底层的异常中断,就根据数据的值进行逻辑判断指针是否有效确定指针范围,另外如果只是读取,使用void指针一个字节一个字节读取一般不会崩溃吧
辰岡墨竹 2012-08-22
  • 打赏
  • 举报
回复
OD应该是利用驱动重写了异常中断,当CPU发生异常的时候不会崩溃,不过你自己写程序肯定用不了这个。
你只有好好得总结那个有效值的范围,做好检查。
  • 打赏
  • 举报
回复
好像都解决不了,难道就没办法了吗?
Eleven 2012-08-21
  • 打赏
  • 举报
回复
或者试下这两个API函数
IsBadReadPtr/IsBadWritePtr()
  • 打赏
  • 举报
回复
我用OD调目标程序,发现 dd 一个无效的地址,address points nowhere 程序并不会崩溃,dd命令应该也读取了这个位置的内存吧,OD用的是什么方法?
Eleven 2012-08-21
  • 打赏
  • 举报
回复
C Rumtime里有个函数
_CrtIsValidPointer()

Verifies that a specified memory range is valid for reading and writing (debug version only).


int _CrtIsValidPointer(
const void *address,
unsigned int size,
int access
);

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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