伪句柄是什么
今天看核心編程,看到他說的偽句柄,著實有些迷糊,上網(wǎng)上查查,也說的是云里霧里的,所以我就去看看 MICROSOFT的MSDN,他們也是遮遮掩掩的,沒有辦法我就只有靠一些調(diào)試工具來解決了。 從MSDN上,我們知道象GETCURRENTPROCESS,GETCURRENTTHREAD都是在KERNEL32中,所以我用了 OLLYDBG加載了這DLL文件,從中我們可以執(zhí)行單個文件,恩,返回值和應(yīng)用程序中返回的一致,象這種情況, 如果我想的不錯的話,由于他在脫離進程的情況下也能返回正確的值,那他返回的基本上是立即數(shù)(呵呵,我可 不敢絕對話,模糊也是一種美,吐一個)。 現(xiàn)在我們可以證實我們的想法,這樣很簡單,應(yīng)用OLLYDBG給我們提供的功能,直接跳到函數(shù)的首地址,可以看 到GETCURRENTPROCESS的代碼是 OR EAX,0XFFFFFFFF C3 呵呵,這個我想大家都能看懂,我們的偽進程句柄獻身,數(shù)值為-1 那么GETCURRENTTHREAD的代碼也沒有出什么意料之外的情況: PUSH -2 POP EAX C3 恩,不錯,是這樣的,我們的EAX里是0XFFFFFFFE 所以偽句柄就是一個特定的 數(shù)值,對于不同的內(nèi)核對象,是強行規(guī)定的,沒有什么可探討的,可探討之處在于 MICROSOFT為什么這樣處理,對性能來說這沒有什么可挑剔的(哈哈)。 其實真正的目的可能是(沒有辦法,MICRO總是不愿出來澄清一些東西,我也不敢MAKE SURE): 在本身進程和線程中,對句柄沒有必要進行權(quán)限的限制,而在把句柄交由別的進程或別的線程操作時可能就不怎 么放心,一般要加上權(quán)限限制,這樣就可以減少意外情況的發(fā)生。 至于偽句柄和真實句柄之間的轉(zhuǎn)換和權(quán)限限制,可以參考DUMPLICATEHANDLE,如果你對以上說明感到懷疑,可 以直接用進程和線程的數(shù)值代替看看結(jié)果。 注意HANDLE的定義: typedef void * HANDLE; HANDLE hproc=0xFFFFFFFF; HANDLE hthre=0xFFFFFFFE;
?
網(wǎng)址:http://blog.csdn.net/ouyang2008/archive/2006/08/02/1009760.aspx
總結(jié)
- 上一篇: VSCode配置vue用户代码片段Sni
- 下一篇: Workflow WF Referenc