2012-02-27 36 views
2

請幫我解決這個問題。我執行以下在gdb和控制檯輸出命令被如下 -gdb拋出錯誤說程序有一個函數「malloc」

Rohan_gdb $組是$ var = 15

Rohan_gdb $ P $變種

$ 5 = 0xf

Rohan_gdb $組是$ var =爲(int *)10

Rohan_gdb $ p $變種

$ 6 =(INT *)是0xA

Rohan_gdb $集合$炭= 「ABC」

Rohan_gdb $ P $炭

$ J = 「ABC」

Rohan_gdb $集合$焦炭=(字符*) 「XYZ」

評估這個表達式需要程序具有一個函數 「malloc」。 * //這裏我得到錯誤.... *

Rohan_gdb $ P $焦炭

$ 8 = 「ABC」

Rohan_gdb $

我在這裏與目標調試而不是本機調試。我正在使用GNU gdb(GDB)7.2版本。是否可以使用腳本解決。 任何人都可以幫我解決這個問題。在此先感謝.....

回答

2

我不知道如何解決您的具體問題,但我碰到類似的東西。鑑於問題的年齡,也許這將提供一個線索。

問題是您的腳本正在嘗試將值存儲在緩衝區中,並且它必須爲該存儲分配一個新的緩衝區。存儲需求可能是由於轉換或第二個字符串不在二進制文件中的常量字符串中。

要修復,要麼改變你的代碼,不要求malloc(這是一個點擊或錯過,據我所知)。或者使malloc符號可用;加載符號表,該表允許gdb解析「_malloc」符號。

+0

malloc是在標準C庫中,你如何加載符號? – Michael 2016-01-17 18:04:43

+0

這是一個非常好的問題。通常情況下,標準C庫的符號對於我工作的環境來說「就在那裏」。鑑於OP的問題的背景,我懷疑它們處於並非如此的環境中。坦率地說,最簡單的解決方案是編譯一個圍繞malloc()的存根包裝器,並與它鏈接並手動調用它。說實話,自從我不得不建立標準庫以來,這已經很長時間了,如果沒有大量研究,我現在不知道如何去做。 – bbum 2016-01-17 18:51:57

相關問題