linux - 如何反汇编系统调用?

标签 linux gdb system-calls disassembly

我怎样才能反汇编系统调用,以便我可以得到其中涉及的汇编指令

最佳答案

好吧,你可以做这样的事情。假设我想获取“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/

相关文章:

c++ - 强制读取系统调用阻塞

linux - ARM 汇编时间系统调用意外值

Linux bash if - elif 没有按预期工作

linux - docker run 的命令行参数

linux - 使用 J-Link OpenSDA 固件和 GDB 调试 mBed-OS 5

c++ - gdb 中未解析的调试符号

linux - 如何使用 Ansible 删除 cron 作业?

android - Linux操作系统下的2D安卓游戏开发工具

c++ - gdb - 查找 strncmp() 函数的值

linux - 系统调用在调用_exit时返回07