NASMとGDBのシンボル: “シンボルファイル内にコードセクションが見つかりません。”

私は読んでいるアセンブリの本から働いている簡単な例を得ようとしています。私はNASMアセンブラでアセンブルしている簡単なアセンブリプログラムでgdbを動作させようとしています。以下は、コードとelf形式のオブジェクトファイルです。

そして

[email protected]:~/Code/AsmWork/eatsyscall$ objdump -s ./eatsyscall.o

./eatsyscall.o:     file format elf32-i386

Contents of section .data:
 0000 45617420 6174204a 6f652773 210a      Eat at Joe's!.  
Contents of section .txt:
 0000 90b80400 0000bb01 000000b9 00000000  ................
 0010 ba0e0000 00cd80b8 01000000 bb000000  ................
 0020 00cd80                               ...             
Contents of section .stab:
 0000 00000000 64000100 00000000           ....d.......    
Contents of section .stabstr:
 0000 00  

I am using the following commそしてto assemble:

nasm -f elf -g -F stabs eatsyscall.asm

そしてI am using the following commそしてto link:

ld -o eatsyscall eatsyscall.o

私がGDBを実行可能ファイルで実行すると、次のようになります:

[email protected]:~/Code/AsmWork/eatsyscall$ gdb eatsyscall 
GNU gdb (Ubuntu/Linaro 7.3-0ubuntu2) 7.3-2011.08
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change そしてredistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
そして"show warranty" for details.
This GDB was configured as "i686-linux-gnu".
For bug reporting instructions, please see:
...
Reading symbols from /home/mehoggan/Code/AsmWork/eatsyscall/eatsyscall...Can't find any code sections in symbol file
(gdb) quit

-gフラグを指定してNASMに指定されたデバッグシンボルをgdbに読み込ませるには、上記の作業に加えて何をする必要がありますか?

FYI

[email protected]:~/Code/AsmWork/eatsyscall$ cat /etc/*release*
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.10
DISTRIB_CODENAME=oneiric
DISTRIB_DESCRIPTION="Ubuntu 11.10"
[email protected]:~/Code/AsmWork/eatsyscall$ uname -a
Linux mehoggan 3.0.0-12-generic-pae #20-Ubuntu SMP Fri Oct 7 16:37:17 UTC 2011 i686 i686 i386 GNU/Linux
[email protected]:~/Code/AsmWork/eatsyscall$

– 更新 –

次のコマンドで64ビットルートを使用しても、まだ成功していません。

mehoggan @ mehoggan:〜/ Code/AsmWork/eatsyscall $ nasm -f elf64
-g -F stabs eatsyscall.asm mehoggan @ mehoggan:〜/
Code/AsmWork/eatsyscall $ ld -o eatsyscall eatsyscall.o
-melf_x86_64 mehoggan @ mehoggan:〜/ Code/AsmWork/eatsyscall $
./eatsyscall bash:./eatsyscall:バイナリファイルを実行できません mehoggan @
mehoggan:〜/ Code/AsmWork/eatsyscall $ objdump -s eatsyscall.o

eatsyscall.o:ファイル形式elf64-x86-64

セクション.dataの内容:  0000 45617420 6174204a 6f652773
210aジョーズの食べる!
セクション.txtの内容:  0000 9048b804 00000000 00000048 bb010000 .H
……… H ….  0010 00000000 0048b900 00000000 00000048
….. H ……… H  0020 ba0e0000 00000000 00cd8048 b8010000
………… H ….  0030 00000000 0048bb00 00000000 000000cd
….. H ……….  0040 80。
セクション.stabの内容:  0000 00000000 64000100 00000000 …. d
…….
セクション.stabstrの内容:  0000 00。
mehoggan @ mehoggan:〜/ Code/AsmWork/eatsyscall $

ベストアンサー

どのように section .text のisteadセクションを使用するのですか?

あれは:

SECTION .data                    ; Section containing initialized data
EatMsg: db "Eat at Joe's!",10
EatLen: equ $-EatMsg

SECTION .bss                     ; Section containing uninitialized data

SECTION .text                    ; instead of .txt

後でgdbでうまく動作し、x64アーキテクチャーの場合は、x64フラグを使用してください。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です