使用Windbg來查看TEB的結構,只用命令:!TEB即可(注意:如果系統中安裝了360殺毒軟件以及安全衛士,將導致Windbg的此命令以 及其他部分命令不能使用,建議卸載掉360殺毒軟件以及安全衛士)。通過結果可以查看TEB的內部結構,TEB的第一個結構叫做NtTib,它包含8個成 員變量,其中第一個成員變量是_EXCEPTION_REGISTRATION_RECORD結構,它有兩個成員變量,分別爲Next和Handler, 這個結構是用於ring3的異常調試之用。在MASM下編寫過異常處理的都會熟悉一下代碼:
push _ExceptionHandle
push fs:[0]
mov fs:[0],esp
這段代碼是編寫異常處理經常用到的,其原理就是使用了此結構以及FS的知識,相關資料可以到網上查詢。
再NtTib的0x18偏移處是Self的指針,它指向NtTib本身,同時NtTib又是TEB結構的第一個成員變量,所以
mov eax,fs:[18h]//以fs爲段選擇器
此時的eax就指向了TEB結構本身,也就是Self指向了TEB結構。
在TEB的0x30處是PEB結構,所以
mov eax,[eax+30h]//以ds爲段選擇器
此時的eax已經指向了PEB結構。在Windbg中可以通過下列方法來獲得PEB結構的地址:
1.>dt ntdll!_TEB的方式來查看TEB結構的具體內容,並從中可以查看到PEB的地址。
2.>!teb同樣可以查看。
3.>r $peb直接打印處peb的地址
4.>dd $teb+30 L1可以直接查處位於teb+30處的peb的地址
通過此中方法即可獲得各種TEB結構的指針進行相關的編程。參考文獻([1])
***********參考文獻**************************************************************
[1] 通過TEB/PEB枚舉當前進程空間中用戶模塊列表;
http://www.newsmth.net/bbsanc.php?path=%2Fgroups%2Fcomp.faq%2FMSDN%2FIndividualSpecial%2Fhellguard%2FM.1060672344.20