【问题标题】:How can I decode this instruction "call *fs:0x334" to know the exact function address?如何解码这条指令“call *fs:0x334”以了解确切的函数地址?
【发布时间】:2012-03-07 00:02:58
【问题描述】:

在运行时,如何获取寄存器 fs 中的值并计算“call *fs:0x334”中目标函数的地址?我可以使用哪种 x86 程序集?

【问题讨论】:

  • 通常选择器(如fs)有一个值,后面的部分是该值的偏移量。

标签: assembly linux-kernel x86 x86-64


【解决方案1】:

call *fs:0x334中的目标函数地址是fs:0x334中存储的值。

所以,如果你想知道那个地址是什么,你可以加载它。

例如mov rax, [fs:0x334] (nasm) 或 mov %fs:0x334, %rax (gas)。

您不需要知道fs 本身指向什么(这也一样:它指向描述符表中的一个条目,您可能有或可能没有读取权限,它指向一个线性地址,可以通过任何其他段选择器访问,也可以不访问)。

在 x86-64 Linux 上,内核和 glibc 合作以确保 fs 始终指向当前运行线程的线程本地存储区域。 (在 32 位 x86 Linux 上,gs 用于此目的。)

【讨论】:

    猜你喜欢
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多