首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找出GDT的内容?

如何找出GDT的内容?
EN

Stack Overflow用户
提问于 2013-03-28 09:44:00
回答 2查看 1K关注 0票数 1

我正在分析一个拆解的dll,结果被困在了线路上。

代码语言:javascript
复制
mov ebx,fs:[00000004h]

我想找出与此指令写入ebx的数据的确切物理地址。gdb告诉我fs = 0x53.

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

有人能帮我吗?

我使用了指令smsw ax,之后eax是0x280031。最后一位是1,这意味着保护模式。我说对了吗?

EN

回答 2

Stack Overflow用户

发布于 2013-03-28 11:37:43

是的,这是保护模式。

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-03-28 16:55:36

既然你提到了一个DLL,我想它都是在Windows上的。在Windows上,已知FS指向线程信息块(TIB)。在偏移量4处,有指向堆栈顶部的指针。代码将其加载到EBX中,仅此而已。

FS的值并不重要,您也不需要在GDT周围打探。它是API的一个文档部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15678530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档