日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

2 《Undocumented Windows 2000 Secrets》翻譯 --- 第二章

第二章 The Windows 2000 Native API
翻譯: Kendiv
更新: Friday, February 04, 2005
Windows 2000 運(yùn)行時(shí)庫
Nt*() 和 Zw*() 函數(shù)構(gòu)成了 Native API 的基本部分,但并不是主要部分,還有一部分代碼位于 ntdll.dll 中 。該 DLL 至少導(dǎo)出了 1179 個(gè)符號 。其中的 249 和 248 個(gè)分別屬于 Nt*() 和 Zw*() 函數(shù)集,剩余的 682 個(gè)函數(shù)并不通過 INT 2eh 中斷進(jìn)行調(diào)用 。顯然,這一大組函數(shù)并不依賴 Windows 2000 內(nèi)核 。那提供它們的目的何在呢?讓我們繼續(xù)往下看 。
C 運(yùn)行時(shí)庫
如果你研究過位于 ntdll.dll 導(dǎo)出節(jié)( export section )的符號,你會發(fā)現(xiàn)很多在 C 程序員看來很熟悉的小寫的函數(shù)名稱 。這些都是眾所周知的名子,如 memcpy() 、 sprintf() 和 qsort() ,這些 C 運(yùn)行時(shí)庫中的函數(shù)都合并到了 ntdll.dll 中 。對于 ntoskrnl.exe 也是如此,它同樣提供了一組與 C 運(yùn)行時(shí)函數(shù)十分相像的函數(shù),雖然這兩組函數(shù)并不相同 。附錄 B 的 表 B-3 列出了這兩組函數(shù),并指出了每個(gè)函數(shù)分別屬于哪個(gè)模塊 。
你可以簡單的將 ntdll.lib (來自 Windows 2000 DDK )添加到導(dǎo)入庫列表(鏈接器在解析符號期間將掃描該列表)中,就可以鏈接到這些函數(shù) 。如果你更喜歡對話框,你可以選擇 Visual C/C的工程菜單中的 Settings 子菜單,然后單擊 Linke 頁,選擇 Category General ,然后將 ntdll.dll 添加到 Object/Library 模塊列表中 。還有一種方法:在源文件中,添加如下的內(nèi)容:
#pragma comment(linker,”/defaultlib:ntdll.lib”)
這同樣有效,好處是,其他開發(fā)人員可以使用 Visual C/C的默認(rèn)設(shè)置來 rebuild 你的工程 。
反編譯這些與 C 運(yùn)行時(shí)函數(shù)類似的函數(shù)(來自 ntdll.dll 和 ntoskrnl.exe ),會發(fā)現(xiàn) ntdll.dll 并不依賴于 ntoskrnl.exe ,這和 ndll.dll 中的 Native API 不一樣 。事實(shí)上,這兩個(gè)模塊分別實(shí)現(xiàn)了這些函數(shù) 。本節(jié)出現(xiàn)的其他函數(shù)也是如此 。注意,表 B-3 中的一些函數(shù)并不使用其導(dǎo)出的名稱 。例如,如果在內(nèi)核模式的驅(qū)動程序中針對一個(gè) 64 位的 LARGE_INTEGER 使用移位操作符 << 和 >> ,編譯器和鏈接器會自動導(dǎo)入 ntoskrnl.exe 的 _allshr() 和 _allshl()。
擴(kuò)展的運(yùn)行時(shí)函數(shù)
隨同標(biāo)準(zhǔn)的 C 運(yùn)行時(shí)函數(shù),Windows 2000 還提供了一組擴(kuò)展的運(yùn)行時(shí)函數(shù) 。在次強(qiáng)調(diào),ntdll.dll 和 ntoskrnl.exe 分別實(shí)現(xiàn)了它們 。并且其中有些函數(shù)是重疊的 。這些擴(kuò)展函數(shù)的名字都有一個(gè)共同的前綴 Rtl ( for Runtime Library ) 。附錄 B 的 表 B-4 列出了所有這些擴(kuò)展函數(shù) 。Windows 2000 提供的這些運(yùn)行時(shí)函數(shù)還包含用于普通任務(wù)的助手函數(shù)( helper function ),這些任務(wù)都超過了 C 運(yùn)行時(shí)函數(shù)的能力范圍 。例如,其中的某些用于管理安全性,另一些用于操作 Windows 2000 特有的數(shù)據(jù)結(jié)構(gòu),還有一些對內(nèi)存管理提供支持 。很難理解為什么微軟僅在 Windows 2000 DDK 中提供了其中 115 個(gè)函數(shù)的文檔,而扔掉了其余 406 個(gè)非常有用的函數(shù) 。
浮點(diǎn)模擬器( The Floating-Point Emulator )
讓我用 ntdll.dll 提供的另一組函數(shù)集合來結(jié)束這次 API 函數(shù)匯展 。表 2-1 列出了這些函數(shù)的名稱,這些名稱可能對于匯編程序員有些眼熟 。去了名稱前的 __e 前綴,你就會得到 i386 系列 CPU 中的 FPU ( Floating-Point Unit )匯編助記符 。事實(shí)上,從 表 2-1 中列出的函數(shù)來看,ntdll.dll 包含了一個(gè)完整的浮點(diǎn)模擬器 。這再次證明了這個(gè) DLL 是一個(gè)龐大的代碼倉庫,這吸引了眾多的 System Spelunker 去反編譯它 。
表 2-1. ntdll.dll 的浮點(diǎn)模擬器接口
函數(shù)名稱
_eCommonExceptions
_eFIST32
_eFLD64
_eFSTP32
_eEnulatorInit
_eFISTP16
_eFLD80
_eFSTp64
_eF2XM1
_eFISTP32
_eFLDCW
_eFSTP80
_eFABS

推薦閱讀