2012-10-06 107 views
1

我沒有完整的源代碼,只是帶有符號的對象文件。讀線有:在GDB中打印裝配體變量

=> 0x080489cd <+169>: call 0x8049275 <read_line> 
    0x080489d2 <+174>: mov %eax,(%esp) 
    0x080489d5 <+177>: call 0x8048d59 <phase_1> 

in the function: 
8048d59: 55      push %ebp 
8048d5a: 89 e5     mov %esp,%ebp 
8048d5c: 83 ec 08    sub $0x8,%esp 

我在第一行放了一個b,並在函數名稱中加了一個以確保。進入「1」後試過p *(char**)$esp,我得到:

0x80489da "\350\355\006" 

這不是我所期待的。我期望看到「1」。我也試過:

gdb x $esp 
0xbffff0cc: 0x080489da 

gdb x *0xbffff0cc 

0x80489da <main+182>: 0x0006ede8 
+0

你說你有符號的目標文件。你知道它是否用'gcc -g'編譯,即帶有調試信息。如果出現這種情況,您可以很快恢復100%的源代碼。 – QuasarDonkey

回答

4

如果您是在第一類的功能的破壞(我假定這就是你的意思是:「我把AB的第一行」),那麼你看到的是回報地址。看起來您實際上正在看到調用phase_1的返回地址。

如果你正在尋找的是第一個參數嘗試:

p *(char**)($esp+4); 
+0

我還沒有把它做成階段1。第二部分在第1階段。我如何獲得個人指導的結果? – user994165

+0

我不確定你的意思是「個別指導的結果」。說明本身沒有「結果」。您可以查看寫入(內存或註冊)的位置。如果你想要的只是read_line的結果,那麼我真的建議你嘗試一下我提供的語句。如果它不起作用告訴我它說了什麼。 – CrazyCasta