系统相关
首页 > 系统相关> > linux – 如何反汇编系统调用?

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