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

1 《Undocumented Windows 2000 Secrets》翻譯 --- 第二章( 五 )


8046ab80 804704d800000000 000000f8 804708bc
8046ab90 00000000 00000000 00000000 00000000
8046aba0 00000000 00000000 00000000 00000000
8046abb0 00000000 00000000 00000000 00000000
8046abc0 804704d800000000 000000f8 804708bc
8046abd0 a0186bc0 00000000 0000027f a0187840
8046abe0 00000000 00000000 00000000 00000000
8046abf0 00000000 00000000 00000000 00000000
kd> ln 8046abc0
(8046abc0) nt!KeServiceDescriptorTableShadow
kd> ln 804704d8
(804704d8) nt!KiServiceTable
kd> ln 804708bc
(804708bc) nt!KiArgumentTable
kd> ln a0186bc0
(a0186bc0) win32k!W32pServiceTable
kd> ln a0187840
(a0187840) win32k!W32pArgumentTable
kd> dd KiServiceTable
804704d8 804ab3bf 804ae86b 804bdef3 8050b034
804704e8 804c11f4 80459214 8050c2ff 8050c33f
804704f8 804b581c 80508874 8049860a 804fc7e2
80470508 804955f7 8049c8a6 80448472 804a8d50
80470518 804b6bfb 804f0cef 804fcb95 8040189a
80470528 804d06cb 80418f66 804f69d4 8049e0cc
80470538 8044c42280496f58 804ab849 804aa9da
80470548 80465250 804f4bd5 8049bc80 804ca7a5
kd> db KiArgumentTable
804708bc 18 20 2c 2c 40 2c 40 44-0c 18 18 08 04 04 0c 10 . ,,@,@D........
804708cc 18 08 08 0c 08 08 04 04-04 0c 04 20 08 0c 14 0c ........... ....
804708dc 2c 10 0c 1c 20 10 38 10-14 20 24 1c 14 10 20 10 ,... .8.. $... .
804708ec 34 14 08 04 04 04 0c 08-28 04 1c 18 18 18 08 18 4.......(.......
804708fc 0c 08 0c 04 10 00 0c 10-28 08 08 10 00 1c 04 08 ........(.......
8047090c 0c 04 10 00 08 04 08 0c-28 10 04 0c 0c 28 24 28 ........(....($(
8047091c 30 0c 0c 0c 18 0c 0c 0c-0c 30 10 0c 0c 0c 0c 10 0........0......
8047092c 10 0c 0c 14 0c 14 18 14-08 14 08 08 04 2c 1c 24 .............,.$
kd> ln 8044c422
(8044c422) nt!NtClose
示例 2-2 檢查服務(wù)描述符表
譯注:
在 Windows XP 中,KeServiceDescriptorTable 和 KeServiceDescriptorTableShadow 和 Windows 2000 有所區(qū)別 。在 XP 中,后者位于前者的前面,而在 W2K 中,后者位于前者的后面 。
INT 2eh 系統(tǒng)服務(wù)處理例程( System Service Handler )
隱藏在內(nèi)核模式中的 INT 2eh 中斷處理例程為 KiSystemService()。再強(qiáng)調(diào)一次,這是一個(gè)內(nèi)部符號,ntoskrnl.exe 并沒有導(dǎo)出該符號,不過,它卻包含在 Windows 2000 的符號文件中 。因此,內(nèi)核調(diào)試器可以正確的解析該符號 。從本質(zhì)上來看,KiSystemService() 將執(zhí)行如下操作:
1. 從當(dāng)前線程的控制塊( thread"s control block )中檢索 SDT 指針 。
2. 通過測試 EAX 寄存器中的分派 ID 的第 12 、 14 位來確定使用 SDT 中的那個(gè) SST ( SDT 中有四個(gè) SST ) 。如果分派 ID 位于 0x0000-0x0FFF,將選擇 ntoskrnl 表;位于 0x1000-0x1FFF 則選擇 Win32k 表 。0x2000-0x2FFF 和 0x3000-0x3FFF 由 SDT 的 Table3 和 Table4 保留 。如果分配 ID 超過了 0x3FFF,在分派前多余的位將被屏蔽掉 。
3. 通過檢查分派 ID 的 0 到 11 位來確定該 ID 在所選 SST 中對應(yīng)的 ServiceLimit 成員 。如果 ID 超出了范圍,將返回錯(cuò)誤代碼: STATUS_INVALID_SYSTEM_SERVICE。在一個(gè)未使用的 SST 中,ServiceLimit 成員始終是 0,從而為所有可能的分派 ID 產(chǎn)生一個(gè)錯(cuò)誤代碼 。
4. 通過檢查 EDX 中保存的參數(shù)堆棧指針,來取得 MmUserProbeAddress 的值 。這是由 ntoskrnl.exe 導(dǎo)出的一個(gè)公開變量 。參數(shù)指針通常會(huì)與 0x7FFF0000 進(jìn)行比較 。如果沒有低于該地址,那么將返回 STATUS_ACCESS_VIOLATION。
5. 根據(jù)在 SST 的 ArgumentTable 中查找到的參數(shù)堆棧的字節(jié)數(shù),將所有函數(shù)參數(shù)從調(diào)用者堆棧中復(fù)制到當(dāng)前的內(nèi)核堆棧中 。
6. 在從服務(wù)調(diào)用( Service Call )中返回后,將控制權(quán)傳遞給內(nèi)部函數(shù) KiServiceExit()
非常有趣的是 INT 2eh 中斷處理例程并不使用全局 SDT (即 KeServiceDescriptorTable ),而是使用線程專屬的指針替代之 。顯然,每個(gè)線程可以擁有不同的 SDT。在線程初始化時(shí),KeInitializeThread() 會(huì)將 KeServiceDescriptorTable 的指針寫入線程控制塊( Thread Control Block )中 。不過,此默認(rèn)值在稍后可能會(huì)改變,如改為指向 KeServiceDescriptorTableShadow。

推薦閱讀