gpt4 book ai didi

assembly - 比终端+objdump 更好的方法来读取程序集?

转载 作者:行者123 更新时间:2023-12-05 03:16:12 29 4
gpt4 key购买 nike

例如,如果我在 perf report 中,我可以按 enter 键跟随一个分支。如果一个 bin 使用 -g 一些来源也会出现。

我真的不需要源代码,但如果我能跟着跳转会很方便。我该怎么做才能使阅读汇编更容易?因为我在 linux 上,所以我最终运行了 perf 并使用报告来阅读这个

最佳答案

objdump -d --visualize-jumps=color 很有趣,尽管在大型二进制文件上无法使用,因为它有太多行列。在我周围的一个随机较小的二进制文件中(来自在 32 位模式下测试 64 位 _Atomic 变量的对齐,以防有人好奇;这个二进制文件来自 clang):

objdump -drwC -Mintel --visualize-jumps=color

...
726: e8 a5 fd ff ff call 4d0 <pthread_create@plt>
72b: 83 c4 10 add esp,0x10
72e: 85 c0 test eax,eax
730: /-------- 75 62 jne 794 <main+0xb4>
732: /--|-------> c5 f8 57 c0 vxorps xmm0,xmm0,xmm0
736: | | c5 fb 10 8e 48 e8 ff ff vmovsd xmm1,QWORD PTR [esi-0x17b8]
73e: | | 66 90 xchg ax,ax
740: | | /----> 31 c0 xor eax,eax
742: | | | 31 d2 xor edx,edx
744: | | | 31 c9 xor ecx,ecx
746: | | | 31 db xor ebx,ebx
748: | | | f0 0f c7 8e c0 00 00 00 lock cmpxchg8b QWORD PTR [esi+0xc0]
750: | | | c5 f9 6e d0 vmovd xmm2,eax
754: | | | c4 e3 69 22 d2 01 vpinsrd xmm2,xmm2,edx,0x1
75a: | | | c5 f9 2e d0 vucomisd xmm2,xmm0
75e: | | | /-- 75 02 jne 762 <main+0x82>
760: | | +--|-- 7b de jnp 740 <main+0x60>
762: | | | \-> c5 f9 2e d1 vucomisd xmm2,xmm1
766: | | | /-- 75 02 jne 76a <main+0x8a>
768: | | \--|-- 7b d6 jnp 740 <main+0x60>
76a: | | \-> 83 ec 04 sub esp,0x4

...

Agner Fog's objconv disassembler使输出准备好组装,包括分支目标上的标签,从而更容易找到循环的顶部。 中的示例输出 How to disassemble a binary executable in Linux to get the assembly code? 其他答案显示了 objdump -d -S 混合源代码和 asm 的示例。


还相关: How to remove "noise" from GCC/clang assembly output? 我通常查看 gcc -O3 ... -S 输出,而不是汇编成二进制文件。除非我已经有一个特定的二进制文件。 Godbolt compiler explorer有很好的工具来查找与源代码行关联的 asm,例如循环体,它在大多数情况下都可以工作,具体取决于编译器生成的调试信息。

关于assembly - 比终端+objdump 更好的方法来读取程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74793599/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com