linux - 识别汇编中的库调用

标签 linux assembly dll gdb x86-64

鉴于我从 GDB 获得的以下程序集,有什么方法可以确定正在导入什么函数? GDB 注释告诉我们,我们正在导入 puts,但我如何静态地弄清楚这一点?

Dump of assembler code for function puts@plt:
   0x00000000004003b8 <+0>: jmpq   *0x2004a2(%rip)        # 0x600860 <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3b4b4e4f487b5c544f154b574f" rel="noreferrer noopener nofollow">[email protected]</a>>
   0x00000000004003be <+6>: pushq  $0x0
   0x00000000004003c3 <+11>:    jmpq   0x4003a8

最佳答案

您可以使用objump:

objdump -d foo

您可以通过管道将 objdump 输出传输到 grep

objdump -d foo | grep -A 3 'puts@plt>:'

-A后面的数字控制匹配后打印的行数(指令)。

关于linux - 识别汇编中的库调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20251838/

相关文章:

java - 在 linux 中运行 startup.sh 时权限被拒绝

linux - Linux x86-64 系统调用破坏 %r8、%r9 和 %r10 什么时候?

assembly - 编译器添加的分支和进位

java - 当在Java中加载jni dll时,JDK 1.8 UnsatisfiedLinkError

com - 我的 32 位和 64 位 COM 组件可以共存于同一台机器上吗?

linux - 在 Linux 中检测文件移动或重命名的最佳方法?

java - 不支持登录方式! JavaMail、Dovecot、CentOS 7

linux - 在不同目录中连接同名文件的更快方法

assembly - 为什么我们需要在系统启动或系统初始化时禁用所有中断?

c++ - 编译之间 C 函数符号的地址是否常量