使用Windbg查看TEB结构

使用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


你可能感兴趣的:(学习笔记)