The*_*ion 4 x86 assembly intel
我正在尝试重新编码一个简单的 ftrace,但我无法理解像这样的 FF 间接调用:
ff 15 76 0b 20 00 callq *0x200b76(%rip) # 600ff0 <__libc_start_main@GLIBC_2.2.5>
Run Code Online (Sandbox Code Playgroud)
它是否像带有偏移量的 E8 指令一样工作?如果没有,如何找到呼叫指向的地址?那个电话的返回地址?
该指令callq *0x200b76(%rip)执行以下操作:
rip + 0x200b76,其中rip是指令指针。根据评论,这应该是地址,0x600ff0但如果您的代码被重新定位,它可能会有所不同。与普通call(即 opcode e8)指令的不同之处在于,这是一个间接函数调用,我们调用的地址是从内存加载而不是在内存中指定的。这由星号 ( *) 表示。call foo是call *foo喜欢mov $foo,%eax是mov foo,%eax。