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

Assembly showing a lot of repeating code?

所以我正在研究一些二进制文件以汇编成 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    [=10=]x1,%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    [=10=]x1,%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 -- 图片应该会更清晰。

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

更新:

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

仔细观察:不是相同的输出。 objdump 将显示重新定位,显示他 CALL 实际要去的地方。

您还应该能够 link Project1.o 进入可执行文件(类似于 gcc Project1.o -o Project1),然后 运行 gdb Project1 然后 disas main.您会看到 that 反汇编更有意义,并且也匹配 objdump.

的输出