2013-03-28 76 views
1
的内容

我分析拆解的DLL和卡住就行如何找出GDT

mov ebx,fs:[00000004h] 

我想找出写入EBX与该数据的确切物理地址指令。 GDB告诉我,fs = 0x53.

我已经发现该地址取决于模式(受保护或实际),我敢肯定,CPU处于保护模式(见*)。所以段fs的开始应该存储在GDT的某个地方,对吧?我也找到了GDT-register (0x009bd5c0007f)的地址,但gdb不允许我访问或读取寄存器,所以我不知道如何找出fs的物理地址(因此也就是fs:[00000004h])。

有人可以帮我吗?

我使用指令smsw ax,之后eax是0x280031。所以最后一位是1,这意味着保护模式。我有没有得到那个权利?

+0

呵呵?动态链接库? – JosephH 2013-03-28 09:47:42

+1

如果这是32位代码,它可能是从[TIB/TEB](http://en.wikipedia.org/wiki/Win32_Thread_Information_Block) – Michael 2013-03-28 10:00:49

回答

2

是的,它是保护模式。

而且您可能通过使用SGDT指令找到GDT的虚拟地址。

但是,该地址不太可能有用,因为只能从OS内核中执行的代码(可能是内核模式驱动程序)读取该地址的内存。

您需要找到一种方法从内核中读取感兴趣的内存。

+0

听起来像是超出了我的能力;-) – Nukualofa 2013-03-28 12:25:29

0

既然你提到一个DLL,我认为它都在Windows上。在Windows上,已知FS指向线程信息块(TIB)。在偏移量4处,有指向栈顶的指针。代码将其加载到EBX,就是这样。

FS的价值并不重要,你也不需要在GDT中徘徊。它是API的一个记录部分。