2012-02-27 19 views
2

この問題を解決する方法を教えてください。私はGDBとコンソール出力でコマンドとしてfollows-され、次の実行gdbが "malloc"という関数を持つプログラムを呼び出すときにエラーが発生する

Rohan_gdb $集合$ VAR = 15

Rohan_gdb $のp $のVAR

$ = 5 0xFの

Rohan_gdb $集合$ VAR = (int型*)10

Rohan_gdb $ p個の$ VAR

$ 6 =(int型*)は0xa

Rohan_gdb $セット$ CHAR = "ABC"

Rohan_gdb $ P $ CHAR

$ J = "ABC"

Rohan_gdb $セット$ CHAR =(CHAR *) "XYZ"

この式を評価するには、プログラムに関数 "malloc"が必要です。 * //ここで私はエラーを得た.... *

Rohan_gdb $ P $ CHAR

$ 8 = "ABC"

Rohan_gdb $

ここで私は、ターゲットとのデバッグをしていますネイティブデバッグではありません。私はGNU gdb(GDB)7.2版を使用しています。スクリプトを使用して解決することは可能ですか? 私はこの問題を解決するのに役立ちます。あらかじめありがとう.....

答えて

2

私はあなたの特定の問題を解決する方法がわかりませんが、私は似たようなものを走りました。質問の時代を考えれば、これは手がかりを与えるだろう。

問題は、スクリプトがバッファに値を保存しようとしていて、そのバッファに新しいバッファを割り当てていなければならないことです。ストレージ要件は、キャストの結果である可能性があります。または、2番目の文字列がバイナリ内の定数文字列にないためです。

修正するには、mallocを必要としないようにコードを変更します(ヒットまたはミスのビットです)。または、mallocシンボルを使用可能にします。 gdbが "_malloc"シンボルを解決できるシンボルテーブルをロードしてください。

+0

mallocは標準のCライブラリにありますが、そのシンボルをどのようにロードしますか? – Michael

+0

これは本当に良い質問です。通常、標準のCライブラリのシンボルは、私が働いている環境のための「ただそこに」あります.OPの質問の文脈を考えると、私は彼らがそうでない環境にいると考えています。率直に言って、最も簡単な解決策は、malloc()の周りにあるスタブ・ラッパーをコンパイルし、それとリンクして手動で呼び出すことです。正直なところ、私は標準ライブラリを構築しなければならなかったので、それはずっとずっとずっとありました。 – bbum

関連する問題