Maison > développement back-end > Golang > objdump et analyser la liaison des appels de fonctions locaux ?

objdump et analyser la liaison des appels de fonctions locaux ?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2024-02-10 17:57:08
avant
1220 Les gens l'ont consulté

objdump 和解析本地函数调用的链接?

php小编柚子给大家介绍一种强大的工具 - objdump,它可以帮助我们解析本地函数调用的链接。objdump是一个用于分析和反汇编二进制文件的命令行工具。通过使用objdump,我们可以查看二进制文件中的函数调用和链接信息,了解函数之间的关系和调用顺序。这对于理解代码的执行流程和调试问题非常有帮助。objdump提供了丰富的选项和功能,可以满足不同场景下的需求。让我们一起来探索objdump的奥秘吧!

问题内容

如果我在 (linux amd64) .o 文件上运行 objdump -d,则会显示函数调用,但未完成链接时间解析。示例:

90:   66 89 44 24 1c          mov    %ax,0x1c(%rsp)
  95:   44 89 74 24 10          mov    %r14d,0x10(%rsp)
  9a:   e8 00 00 00 00          callq  9f <foo+0x9f>
  9f:   83 f8 ff                cmp    $0xffffffffffffffff,%eax
  a2:   74 5e                   je     102 <foo+0x102>
Copier après la connexion

函数内的分支正确显示,但 callq 只是为链接器放入的存根(有四个字节的零可供链接器放入正确的地址)。

有没有一种方法,无需实际链接即可获取已解析函数名称的程序集列表?我不关心最终将使用的地址,只关心函数的名称。该信息必须位于 .o 文件中,因为链接器必须使用它来完成其工作。

我问这个问题是因为相关代码所在的共享库大约有 140Mb,并且需要很长时间来运行 objdump -d 来获取包含所有函数调用的 asm 转储解析为他们的真实姓名。

解决方法

是:使用 objdump -dr foo.o

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal