2014-09-26 72 views
0

我在學習gdb。我編寫了一個簡單的程序,只需通過fgets監聽輸入並將其與「密碼」進行比較。gdb輸入後中斷

我該如何使用gdb來暫停程序並查看比較結果?

,如果我在輸入過程中停止與ctrl+c執行我得到:

#7 0xf7e771ea in _IO_fgets (buf=0xffffd7f0 "T\332\377", <incomplete sequence \367>, n=256, fp=0xf7fa9440) at iofgets.c:58 
    #8 0x080486bc in check_password() 
    #9 0x08048949 in main() 

有什麼辦法,我可以展現check_password代碼清單?如果我trype list它顯示我fgets'...

任何方式,我可以走出fgets

你會從這裏做什麼?

回答

0

如果您使用調試模式(在gcc上,這是-g)進行編譯,您可以在gdb的執行行中設置一個斷點。一旦進入gdb,輸入命令break x,其中x是行號。你可以在check_password()後斷行,如果你的變量在範圍內,或者在範圍內。或者,如果您之前破產,您可以逐行瀏覽代碼。

+0

我explicityly編譯GCC不爲exceciser調試信息還有什麼貢獻。 (也是,我不能upvote,直到我有15名聲望:( – gabriel 2014-09-26 03:13:42

0

disassemble 0x080486bc訣竅!

我接到了fgets的調用,並在它後面放置了一個斷點。

但是,請你會做「破解」這個簡單的字符串comparisson :)

+0

你有沒有嘗試設置一個斷點,你想代碼停止? – 2014-09-26 03:15:28

+0

@CodyGray是的,這有助於擺脫fgets重新啓動程序時,但知道如何對於那些無法重新啓動以達到Bug的情況,「stepout」會很酷。爲了記錄,我設置了'b check_password'並重新啓動了程序 – gabriel 2014-09-26 03:19:39

+0

嗯,我不使用GDB,也沒有。但是快速谷歌搜索應該能夠找到如何使用調試器退出函數。 – 2014-09-26 03:29:35