我想破譯這個彙編代碼的功能。我知道它讀取六個整數來解鎖下一個關卡。閱讀彙編代碼
0x08048c24 <+0>: push %esi
0x08048c25 <+1>: push %ebx
0x08048c26 <+2>: sub $0x34,%esp
我認爲這三條線只是起作用的東西。
0x08048c29 <+5>: lea 0x18(%esp),%eax
0x08048c2d <+9>: mov %eax,0x4(%esp)
0x08048c31 <+13>: mov 0x40(%esp),%eax
0x08048c35 <+17>: mov %eax,(%esp)
0x08048c38 <+20>: call 0x80493b4 <read_six_numbers>
0x08048c3d <+25>: cmpl $0x0,0x18(%esp)
0x08048c42 <+30>: jne 0x8048c4b <phase_2+39>
0x08048c44 <+32>: cmpl $0x1,0x1c(%esp)
0x08048c49 <+37>: je 0x8048c6a <phase_2+70>
我覺得這個比較,在第一號和第一個輸入是平等的,如果不是,則跳轉到explode_bomb功能上+39。然後比較下一個輸入號碼和第二個號碼,如果它們相等(匹配),則跳過explode_bomb函數。
0x08048c4b <+39>: call 0x8049375 <explode_bomb>
0x08048c50 <+44>: jmp 0x8048c6a <phase_2+70>
0x08048c52 <+46>: mov -0x8(%ebx),%eax
0x08048c55 <+49>: add -0x4(%ebx),%eax
0x08048c58 <+52>: cmp %eax,(%ebx)
0x08048c5a <+54>: je 0x8048c61 <phase_2+61>
0x08048c5c <+56>: call 0x8049375 <explode_bomb>
0x08048c61 <+61>: add $0x4,%ebx
0x08048c64 <+64>: cmp %esi,%ebx
0x08048c66 <+66>: jne 0x8048c52 <phase_2+46>
0x08048c68 <+68>: jmp 0x8048c74 <phase_2+80>
0x08048c6a <+70>: lea 0x20(%esp),%ebx
0x08048c6e <+74>: lea 0x30(%esp),%esi
0x08048c72 <+78>: jmp 0x8048c52 <phase_2+46>
0x08048c74 <+80>: add $0x34,%esp
0x08048c77 <+83>: pop %ebx
0x08048c78 <+84>: pop %esi
0x08048c79 <+85>: ret
除此之外,我感到困惑,我很難跟隨它檢查六個數字來解鎖階段。任何專業知識將不勝感激。由於