3

次のメイクファイルを使用した単純なアセンブリ プログラムがあります。

all : calc

calc : calc.o
    gcc -m32 -g -o calc calc.o

calc.o : calc.s
    nasm -f elf -g -F stabs calc.s

を使用してデバッグしようとしましgdbたが、常に次のように表示されます。

行番号情報を持たない関数 asc2int を終了するまでシングル ステップ。

問題に対する多くの解決策を試しました-F dwarfが、どれも機能しませんでした。この問題を解決するのを手伝ってもらえますか?

4

1 に答える 1

4

メイクファイルに問題はありません。

クイックグーグル検索では、次のnasmが得られます。ドキュメントの例は、コードを調べるために逆アセンブルする必要があることを示していますが、既にアセンブリ コードがデバッグされているため、デバッガーがさらに逆アセンブルするように要求する理由は奇妙です。ただし、逆アセンブルされたコードはアセンブリ ソース ファイルとインラインです。

あなたが言及したことから、デバッグできるようです。ステップスルーする命令を使用nextiしている場合に使用します。実行コントロールがどこにあるかを毎回確認するように命令nextできます。disassembleまたは、自動化したい場合は、以下をスクリプトとして保存できます。asm_nextコードをステップ インするための新しい命令になります。

set language asm
set disassembly-flavor intel
define asm_next
nexti
disassemble
end

コマンドを使用して実行します

gdb -x <script> calc

PS 大規模なプログラムの場合、デバッガーの逆アセンブル コードと .s ファイル内のアセンブリ コードの間の相関関係を取得するために -O0 フラグを追加する必要がある場合があります。

于 2012-05-21T14:55:03.047 に答える