伪句柄是什么
今天看核心編程,看到他說的偽句柄,著實有些迷糊,上網上查查,也說的是云里霧里的,所以我就去看看 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;
?
網址:http://blog.csdn.net/ouyang2008/archive/2006/08/02/1009760.aspx
總結
 
                            
                        - 上一篇: VSCode配置vue用户代码片段Sni
- 下一篇: 莫烦python进化算法_使用遗传算法解
