首页 文章

我如何找到GDT的内容

提问于
浏览
1

我正在分析一个反汇编的dll并且卡在了线上

mov ebx,fs:[00000004h]

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

我已经发现地址取决于模式(受保护或真实),我很确定CPU处于保护模式(参见*) . 所以段fs的开始应该存储在GDT的某个地方,对吧?我还找到了 GDT-register (0x009bd5c0007f) 的地址,但gdb并不知道如何找出fs的物理地址(因此, fs:[00000004h] ) .

有人能帮帮我吗?

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

2 回答

  • 2

    因为你在Windows上都是're mentioning a DLL, I assume it' . 在Windows上,已知 FS 指向线程信息块(TIB) . 在偏移量4处,有指向堆栈顶部的指针 . 代码将它加载到 EBX ,就是这样 .

    FS的 Value 无关紧要,也不需要围绕GDT . 它是API的文档部分 .

  • 0

    是的,它是受保护的模式 .

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

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

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

相关问题