为了学习目的,我正在Linux(64位)上编写ftrace程序,我需要使用ptrace() syscall解析指令。
我感兴趣的指令是ret和call。呼叫指令可以采用不同的操作码(0xe8、0x9a和0xff)。这是最后一个质疑我的问题:这个0xff也可以代表inc,dec,jmp和push指令,但是我读到“寄存器/操作码字段”改变了。
我的问题是:我怎样才能得到呼叫而不是12月或公司的信息?我可以访问操作码和登记簿。
谢谢你的阅读和帮助。
发布于 2015-06-30 09:27:38
您可以通过查看下一个指令字节中的3位字段(位数5、4、3)来区分区别。
000 inc instruction
001 dec instruction
010 intra-segment indirect call
011 inter-segment indirect call
100 intra-segment indirect jump
101 inter-segment indirect jump
110 push instruction
111 unused
https://stackoverflow.com/questions/31134113
复制相似问题