伪句柄是什么

今天看核心编程,看到他说的伪句柄,着实有些迷糊,上网上查查,也说的是云里雾里的,所以我就去看看
MICROSOFT的MSDN,他们也是遮遮掩掩的,没有办法我就只有靠一些调试工具来解决了。
从MSDN上,我们知道象GETCURRENTPROCESS,GETCURRENTTHREAD都是在KERNEL32中,所以我用了

OLLYDBG加载了这DLL文件,从中我们可以执行单个文件,恩,返回值和应用程序中返回的一致,象这种情况,

如果我想的不错的话,由于他在脱离进程的情况下也能返回正确的值,那他返回的基本上是立即数(呵呵,我可

不敢绝对话,模糊也是一种美,吐一个)。
现在我们可以证实我们的想法,这样很简单,应用OLLYDBG给我们提供的功能,直接跳到函数的首地址,可以看

到GETCURRENTPROCESS的代码是
OR EAX,0XFFFFFFFF
C3
呵呵,这个我想大家都能看懂,我们的伪进程句柄献身,数值为-1
那么GETCURRENTTHREAD的代码也没有出什么意料之外的情况:
PUSH -2
POP EAX
C3
恩,不错,是这样的,我们的EAX里是0XFFFFFFFE
所以伪句柄就是一个特定的 数值,对于不同的内核对象,是强行规定的,没有什么可探讨的,可探讨之处在于

MICROSOFT为什么这样处理,对性能来说这没有什么可挑剔的(哈哈)。
其实真正的目的可能是(没有办法,MICRO总是不愿出来澄清一些东西,我也不敢MAKE SURE):
在本身进程和线程中,对句柄没有必要进行权限的限制,而在把句柄交由别的进程或别的线程操作时可能就不怎

么放心,一般要加上权限限制,这样就可以减少意外情况的发生。
至于伪句柄和真实句柄之间的转换和权限限制,可以参考DUMPLICATEHANDLE,如果你对以上说明感到怀疑,可

以直接用进程和线程的数值代替看看结果。
注意HANDLE的定义:
typedef void * HANDLE;
HANDLE hproc=0xFFFFFFFF;
HANDLE hthre=0xFFFFFFFE;
                                                                                                                       欧阳, ouyang2001@gmail.com
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值