這個任務是解釋一些彙編代碼,找到一個沒有調用「爆炸炸彈」即可運行的短語。我使用gdb來反彙編當前階段。我被卡住了,關於我是否正朝着正確的方向前進的建議將非常感激。試圖反彙編
0x0000000000400fb5 <+0>: sub $0x18,%rsp
0x0000000000400fb9 <+4>: lea 0x8(%rsp),%r8
0x0000000000400fbe <+9>: lea 0xf(%rsp),%rcx
0x0000000000400fc3 <+14>: lea 0x4(%rsp),%rdx
我相信發生的是我們正在查看%rsp中的短語(基指針指向什麼)。我認爲這是保存在內存中的四件事,在(%rsp),0x4(%rsp),0x8(%rsp)和0xf(%rsp),我認爲它使三個整數和其他東西,但我不肯定是什麼。
0x0000000000400fc8 <+19>: mov $0x4028f6,%esi
地址$ 0x4028f6處的值爲「%d%c%d」。我知道它正在註冊%esi,但我不確定這是如何使用的。
0x0000000000400fcd <+24>: mov $0x0,%eax
0x0000000000400fd2 <+29>: callq 0x400c80 <[email protected]>
不知道這裏發生了什麼事。我看着0x400c80,發現以下情況:
0x0000000000400c80 <+0>: jmpq *0x20340a(%rip)
0x0000000000400c86 <+6>: pushq $0x12
0x0000000000400c8b <+11>: jmpq 0x400b50
我沒有看到被用作寄存器%撕裂,所以我不太清楚怎麼做,或在哪裏看。我認爲它將0x12放在%eax中,但是我不確定它跳到哪裏,因爲0x400b50不是有效的地址。不管怎樣,回到原來的功能:
0x0000000000400fd7 <+34>: cmp $0x2,%eax
0x0000000000400fda <+37>: jg 0x400fe1 <phase_3+44>
0x0000000000400fdc <+39>: callq 0x401719 <explode_bomb>
我認爲我們只是把爲0x18在%eax中,所以它肯定會比0X2更大,程序將跳過「引爆炸彈」。我只想知道我在那裏搞亂了什麼。