我必須爲一個類做一些二進制分析,而且我被困在其中一個程序中。當我設置一些斷點和disas,我看到它看起來像這樣:GDB彙編程序調試
Dump of assembler code for function main:
0x080484e2 <+0>: push %ebp
0x080484e3 <+1>: mov %esp,%ebp
0x080484e5 <+3>: sub $0x48,%esp
0x080484e8 <+6>: and $0xfffffff0,%esp
0x080484eb <+9>: mov $0x0,%eax
0x080484f0 <+14>: sub %eax,%esp
0x080484f2 <+16>: cmpl $0x1,0x8(%ebp)
0x080484f6 <+20>: jg 0x8048504 <main+34>
0x080484f8 <+22>: movl $0x7,(%esp)
=> 0x080484ff <+29>: call 0x804833c <[email protected]>
0x08048504 <+34>: mov 0xc(%ebp),%eax
0x08048507 <+37>: add $0x4,%eax
0x0804850a <+40>: mov (%eax),%eax
0x0804850c <+42>: mov %eax,(%esp)
0x0804850f <+45>: call 0x804832c <[email protected]>
0x08048514 <+50>: mov %eax,-0x10(%ebp)
0x08048517 <+53>: cmpl $0xd,-0x10(%ebp)
0x0804851b <+57>: jne 0x804853b <main+89>
0x0804851d <+59>: lea -0x38(%ebp),%eax
0x08048520 <+62>: mov %eax,(%esp)
0x08048523 <+65>: call 0x8048414 <makebuf>
0x08048528 <+70>: lea -0x38(%ebp),%eax
0x0804852b <+73>: mov %eax,0x4(%esp)
0x0804852f <+77>: movl $0x804863b,(%esp)
** 0x08048536 <+84>: call 0x804831c <[email protected]>
0x0804853b <+89>: movl $0x1,(%esp)
0x08048542 <+96>: call 0x804833c <[email protected]>
End of assembler dump.
(我在星星已經編輯旁邊呼叫的位置對printf @ PLT)。 它看起來像一個程序,它調用exit(),然後生成一個字符串,然後打印出該字符串,然後執行另一個exit()。我認爲,如果我可以繞過這個第一次呼叫退出(),它會打印出我的挑戰答案。是否有正確的方法來設置呼叫發生的位置來執行NOP?如果是這樣,NOP的操作碼是什麼?我試過設置爲0x0和0x00000000。任何幫助將不勝感激!謝謝。
如果這是家庭作業相關的,你應該標記了一個問題,'Homework'。它仍然會被評估。 – HeatfanJohn
你說'它在我看來'。相反,你應該說,'當我單步做它......' – KevinDTimm