加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何验证LPVOID

发布时间:2020-12-16 10:41:51 所属栏目:百科 来源:网络整理
导读:我正在使用C unmanaged,当我调用一个返回LPVOID的方法时,我遇到的问题. LPVOID MyMethod(...); 问题是这个方法有时返回Bad Ptr,我想知道是否有一种方法可以检测到这个,如果返回的值是Bad Ptr. 我试过询问它是否为NULL而没有运气. 我知道如果结果是坏Ptr的唯
我正在使用C unmanaged,当我调用一个返回LPVOID的方法时,我遇到的问题.

LPVOID MyMethod(...);

问题是这个方法有时返回Bad Ptr,我想知道是否有一种方法可以检测到这个,如果返回的值是Bad Ptr.

我试过询问它是否为NULL而没有运气.

我知道如果结果是坏Ptr的唯一方法是在我调试时,我尝试了一些不同的方法,但仍然无法做到.

解决方法

不,没有简单的方法来确定指针是否坏.

Windows确实有IsBadReadPtr,IsBadWritePtr.这些函数本质上存在缺陷 – 它们仅在调用时确定函数在地址空间中是否可读或可写.它们也可能是security issues的原因,绝对不能使用.

主要问题是没有办法区分仍然可以访问进程的“坏”指针和一个好的指针.

例如,

int g[5];
int somethingElse;

void* GetPointer()
{
   return &g[5]; // Whoops,off by one.
}

& g [5]可能是你进程中的一个有效指针,并且可能指向somethingElse,你将能够访问它而不会崩溃但是写入它会破坏你的状态.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读