我正在分析一个反汇编的dll并被卡在线上
mov ebx,fs:[00000004h]
我想找出使用此指令写入ebx的数据的确切物理地址。 gdb告诉我fs = 0x53.
我已经发现地址取决于模式(受保护或真实),我很确定CPU处于保护模式(参见 * )。所以段fs的开始应该存储在GDT的某个地方,对吧?我还找到了GDT-register (0x009bd5c0007f)
的地址,但gdb不允许我访问或读取寄存器,所以我不知道如何找出fs的物理地址(因此,{{{ 1}})。
有人可以帮帮我吗?
我使用了fs:[00000004h]
指令,之后smsw ax
为0x280031。所以最后一位是1,这意味着保护模式。我做对了吗?
答案 0 :(得分:2)
是的,它是受保护的模式。
您可能使用GDT
指令找到了SGDT
的虚拟地址。
但是,该地址不太可能有用,因为您只能从OS内核中执行的代码读取该地址的内存(可能是内核模式驱动程序)。
你需要找到一种方法来从内核中读取感兴趣的内存。
答案 1 :(得分:0)
由于你提到了一个DLL,我认为它全部都在Windows上。在Windows上,已知FS
指向线程信息块(TIB)。在偏移量4处,有指向堆栈顶部的指针。代码将其加载到EBX
,即它。
FS的价值无关紧要,也不需要围绕GDT。它是API的文档部分。