flyman

opengl world
随笔 - 10, 文章 - 0, 评论 - 65, 引用 - 0
数据加载中……

伪句柄是什么

搬一次家:

今天看核心编程,看到他说的伪句柄,着实有些迷糊,上网上查查,也说的是云里雾里的,所以我就去看看
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;

posted on 2007-05-13 14:50 flyman 阅读(1593) 评论(6)  编辑 收藏 引用

评论

# re: 伪句柄是什么  回复  更多评论   

顶一个,好文章,学习中。。

www.doodle8.cn 涂鸦基地,跟踪最新的 web2.0 资源
2007-05-13 17:32 | doodle

# re: 伪句柄是什么  回复  更多评论   

好文章啊,言之有物,而且言之有文。这样积累下去,可以写书了。
有计划的话,和我联系啊。contact (a)turingbook dot com
2007-06-29 09:44 | turingbook

# re: 伪句柄是什么  回复  更多评论   

:-),turingbook说笑了,连LINUX都没有用过的人那能写文章。
2007-06-29 18:31 | flyman

# re: 伪句柄是什么  回复  更多评论   

请问前面两位是 ”托“ 吗, 呵呵, 开个玩笑。。。。。
2007-08-10 23:36 | SmartPtr

# re: 伪句柄是什么  回复  更多评论   

谁请的托,报个名我请客,^_^。
2007-08-11 00:12 | flyman

# re: 伪句柄是什么  回复  更多评论   

恕我小白,感觉你还是在遮遮掩掩的。没理解
2012-01-04 03:53 | dmkl

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理