この質問は StackOverflow で何度か尋ねられましたが、すべての回答を試しましたが、NASM に DWARF デバッグ シンボルを含めることができません。
Ubuntu 18.04 64 ビットで NASM 2.13.02 を使用しています。まだ何かが足りないかどうかわかりませんが?
念のため、実際には LLDB と GDB の両方を使用したいと思います。
ありがとうございます。
これが私のコードです:
section .bss
section .text
global _start
_start:
mov ebx, 0
mov eax, 1
int 80h
これを構築してリンクする方法は次のとおりです。
nasm -g -F dwarf -f elf64 hello.asm
ld -s -o hello hello.o
結果のファイルは次のとおりです:
$ ls -la hello
-rwxr-xr-x 1 terry terry 352 Sep 4 18:21 hello
$
DWARF データが含まれているかどうかを確認しようとしています:
$ dwarfdump hello
No DWARF information present in hello
$
gdb で実行します:
$ gdb ./hello
GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git
[... snip copyright ...]
Reading symbols from ./hello...(no debugging symbols found)...done.
(gdb)
5
すべてを削除する ld で -s を指定したため、最終的な実行可能ファイルのデバッグ情報も削除されます。
– マイケル・ペッチ
2020 年 9 月 4 日 16:32
ああ、@MichaelPetch、ありがとう。それは新人による間違いでした。ありがとうございました!
–
user14222280
2020 年 9 月 4 日 16:36
問題ありません。私たちは皆、何らかの方法で学ばなければなりません!
– マイケル・ペッチ
2020 年 9 月 4 日 16:37
@MichaelPetch ご自由にコメントを回答に移動してください。喜んで受け付けます。
–
user14222280
2020 年 9 月 4 日 16:38
------------------------
私は @Michael からの提案に基づいて自分自身の質問に答えていますPetch は実際に根本原因を発見した人物です。
問題は、デバッグ シンボルを含む「すべてを削除する」ことを意味する -s を付けて ld を使用していたことでした。つまり、私自身の努力が無駄になっていたのです。
正しいコマンドは次のとおりです。
nasm -g -F dwarf -f elf64 hello.asm
ld -o hello hello.o
次に、gdb を使用します。
$ gdb ./hello
GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git
[.. snip copyright ..]
Reading symbols from ./hello...done.
(gdb) b _start
Breakpoint 1 at 0x400080: file hello.asm, line 7.
(gdb) run
Starting program: /home/terry/hello
Breakpoint 1, _start () at hello.asm:7
7 xor ebx, 0
(gdb)
$
共有
この回答を改善します
フォローする
編集
2020 年 9 月 4 日 20:13
2020 年 9 月 4 日 18:19 に回答
ユーザー14222280
ユーザー14222280
2
3
数日後に忘れずに戻ってきて、自分の答えを受け入れてください。素晴らしい週末をお過ごしください!
– マイケル・ペッチ
2020 年 9 月 4 日 19:53
1
ありがとう、必ずやります!
–
user14222280
2020 年 9 月 4 日 20:13