gpt4 book ai didi

c++ - 程序集显示大量重复代码?

转载 作者:行者123 更新时间:2023-12-05 02:28:56 24 4
gpt4 key购买 nike

所以我正在研究一些二进制文件以汇编成 C++ 代码。这是一个项目。

当我反汇编二进制文件时,我得到了很多重复的汇编代码,而且我不确定它在做什么。几乎就像它只是指向下方。

   0x0000000000000000 <+0>:     push   %rbp
0x0000000000000001 <+1>: mov %rsp,%rbp
0x0000000000000004 <+4>: lea 0x0(%rip),%rsi # 0xb <main+11>
0x000000000000000b <+11>: lea 0x0(%rip),%rdi # 0x12 <main+18>
0x0000000000000012 <+18>: callq 0x17 <main+23>
0x0000000000000017 <+23>: callq 0x1c <main+28>
0x000000000000001c <+28>: mov %eax,0x0(%rip) # 0x22 <main+34>
0x0000000000000022 <+34>: mov 0x0(%rip),%eax # 0x28 <main+40>
0x0000000000000028 <+40>: cmp $0x1,%eax
0x000000000000002b <+43>: je 0x40 <main+64>
0x000000000000002d <+45>: lea 0x0(%rip),%rsi # 0x34 <main+52>
0x0000000000000034 <+52>: lea 0x0(%rip),%rdi # 0x3b <main+59>
0x000000000000003b <+59>: callq 0x40 <main+64>
0x0000000000000040 <+64>: mov 0x0(%rip),%eax # 0x46 <main+70>
0x0000000000000046 <+70>: cmp $0x1,%eax

所以重复代码是“lea”和“callq”。根据我阅读它的方式,它只是指向下一行。例如,第一个 lea 以 #0xb 结束,这是它正下方的行,并且指向它下面的行,依此类推。谁能帮我看看我在看什么?

项目中至少有一百多行,所以我不是在寻找免费的 A,我只是需要帮助理解。

编辑:我正在使用无法访问原始 .cpp 文件的 .o 文件,任务是使用 GDB 和 Bless 帮助我读取程序集输出并将其重新组装成一个 .cpp 文件,其工作方式与原始代码。

最佳答案

So the repeating code is the "lea" and "callq".

这些地址表明您正在反汇编 .o 文件,而不是可执行文件(您应该始终在询问其输出时显示您使用的命令)。

改为尝试使用 objdump -dr foo.o —— 图片应该变得更清晰。

附言无论如何,GDB 并不是查看 .o 文件的正确工具。

更新:

I tried the objdump -dr Project1.o and got pretty much the same output

仔细观察:它是相同的输出。 objdump 将显示重定位,显示他 CALL 实际去向的位置。

您还应该能够将 Project1.o 链接到可执行文件(类似于 gcc Project1.o -o Project1),然后运行 ​​gdb Project1 然后 disas main。您会看到 反汇编更有意义,并且与 objdump 的输出匹配。

关于c++ - 程序集显示大量重复代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72454890/

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