2012-12-05 37 views
0

返回在C語言中的隨機值,如果你有一個返回「永遠」的功能相同的結果,你可以這樣做:如何捕捉一個函數在gdb

(gdb) p foo() 

但是,如果這個函數總是返回一個隨機結果,如何在不使用變量的情況下打印THAT值。其他細節,如果你沒有函數的調試信息,它來自一個剝離的lib。

(gdb) p myRandom()不能使用,它會導致一些不同於應用程序使用的值。

你可能會問:「爲什麼你會使用隨機函數而不使用它的結果」,可以說回報只是func做的一件額外事情。

+0

類似的問題[這裏](http://stackoverflow.com/questions/267674/inspect-the-return-value-of-a-function-in-gdb)。 –

回答

2

(GDB)p myRandom()
不能使用,這將導致一些比由應用程序使用的值不同。

想必您會檢查在應用程序名爲myRandom()的特定位置返回給應用程序的值。

您需要在緊隨CALL之後的指令上設置斷點,然後檢查返回值的寄存器。例如,在i*86上,值將返回eax寄存器中,因此您將執行print $eax

或者,在myRandom()上設置一個斷點,然後執行finish命令(您不需要調試信息來完成該操作),然後檢查返回寄存器。