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,你将能够访问它而不会崩溃但是写入它会破坏你的状态. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |