在运行期间,如何获取寄存器fs中的值并在“call * fs:0x334”中计算目标函数的地址?我可以使用什么样的x86组件?
答案 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
用于此目的。)