如何解码此指令“call * fs:0x334”以了解确切的函数地址?

时间:2012-03-07 00:02:59

标签: assembly linux-kernel x86 x86-64

在运行期间,如何获取寄存器fs中的值并在“call * fs:0x334”中计算目标函数的地址?我可以使用什么样的x86组件?

1 个答案:

答案 0 :(得分:5)

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

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

e.g。 mov rax, [fs:0x334](nasm)或mov %fs:0x334, %rax(气)。

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

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