2017-01-13 7 views
0

テスト目的のために終了するだけのアセンブリプログラムを作成しました。コードは次のとおりです。にはldのデバッグオプションがあります

section .text 
    _global start 
_start: 
    mov eax, 1 
    mov ebx, 0 
    int 0x80 

プログラムは明らかに32ビットです。しかし、私は1 64ビットプロセッサおよびオペレーティング・システムを使用していますので、私は(NASMを使用して)、それをコンパイルし、次のように連結された:

nasm -f elf exit.asm 
ld -m elf_i386 -s -o exit exit.o 

GDBでプログラムのデバッグ、私はそこためのコードをリストすることができませんデバッグシンボルはありません。

(gdb) list 
No symbol table is loaded. Use the "file" command. 

gccを使用する場合、-ggdbオプションを使用して、cファイルをコンパイルする際にシンボルをロードできます。しかし、私はgccを使って64ビットマシン用の32ビットアセンブリをコンパイルする方法がないので(私はこれを検索しましたが、解決策を見つけることはできません)、ldを使用することを余儀なくされています。 ldを使ってデバッグシンボルを読み込むことはできますか?長い質問と余分な情報を申し訳ありません。前もって感謝します。

+0

エルフexit.asm -f 'NASM -g -Fドワーフで組み立てるようにしてください'。リンカはデバッグシンボルを作成しません。リンカに生成するように指示する必要があります。 – fuz

+0

何らかの理由でこれが32ビットコードで動作しない限り、nasmが 'nasm -felf -g -l exit.lstを使用してデバッグシンボルをエクスポートするように強制することができますexit.asm' –

+0

@fuz 'nasm -g -F dwarf -f elf exit.asm'は動作しませんでした –

答えて

3

-gを渡すと、デバッグ情報はnasmによって生成されます。また、-Fスイッチで行われるデバッグ情報のタイプ(通常は矮星)を指定する必要もあります。だから、あなたのファイルをアセンブルし、その後シンボルテーブルを維持するために-sずにリンクし、デバッグ情報を

nasm -f elf -F dwarf -g file.asm 

を書き込む:

ld -m elf_i386 -o file file.o 
2

-sスイッチは、デバッグ情報を「削除」するようldに指示します。それを失う!

+0

'nasm -g -F dwarf -f elf exit.asm'を実行して-sパラメータを削除してください。どうもありがとう! –

関連する問題