我怎样才能反汇编系统调用,以便我可以得到其中涉及的汇编指令
最佳答案
好吧,你可以做这样的事情。假设我想获取“dup”的程序集转储:
这样写:
#include <stdio.h>
#include <sys/file.h>
int main() {
return dup(0)
}
编译它:
gcc -o systest -g3 -O0 systest.c
转储它:
objdump -d systest
在“main”中我看到了:
400478: 55 push %rbp
400479: 48 89 e5 mov %rsp,%rbp
40047c: bf 00 00 00 00 mov $0x0,%edi
400481: b8 00 00 00 00 mov $0x0,%eax
400486: e8 1d ff ff ff callq 4003a8 <dup@plt>
40048b: c9 leaveq
40048c: c3 retq
40048d: 90 nop
40048e: 90 nop
40048f: 90 nop
所以看着“dup@plt”我明白了:
00000000004003a8 <dup@plt>:
4003a8: ff 25 7a 04 20 00 jmpq *2098298(%rip) # 600828 <_GLOBAL_OFFSET_TABLE_+0x20>
4003ae: 68 01 00 00 00 pushq $0x1
4003b3: e9 d0 ff ff ff jmpq 400388 <_init+0x18>
所以它正在调用“全局偏移表”,我假设它具有所有系统调用向量。就像另一篇文章所说的那样,请参阅内核源代码(或标准库源代码?)了解详细信息。
关于linux - 如何反汇编系统调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4940522/