linux – 如何反汇编系统调用?
作者:互联网
我怎么能反汇编系统调用,以便我可以获得其中涉及的汇编指令
解决方法:
好吧,你可以做这样的事情.说我想得到一个“dup”的汇编转储:
写这个:
#include <stdio.h>
#include <sys/file.h>
int main() {
return dup(0)
}
编译它:
gcc -o systest -g3 -O0 systest.c
转储它:
objdump -d systest
看着“主要”我看到:
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,gdb,system-calls,disassembly 来源: https://codeday.me/bug/20190531/1188583.html