Debug-Symbole in NASM (noch einmal)

Sep 04 2020

Diese Frage wurde in StackOverflow mehrmals gestellt, aber ich habe alle Antworten ausprobiert und kann NASM immer noch nicht dazu bringen, DWARF-Debugging-Symbole einzuschließen.

Ich verwende NASM 2.13.02 unter Ubuntu 18.04 64-Bit. Ich bin mir nicht sicher, ob mir noch etwas fehlt?

Falls es darauf ankommt, würde ich gerne sowohl LLDB als auch GDB verwenden.

Vielen Dank.

Hier ist mein Code:

section .bss
section .text

global _start

_start:
    mov ebx, 0
    mov eax, 1
    int 80h

So baue und verknüpfe ich es:

nasm -g -F dwarf -f elf64 hello.asm
ld -s -o hello hello.o

Die resultierende Datei lautet:

$ ls -la hello -rwxr-xr-x 1 terry terry 352 Sep 4 18:21 hello $

Es wird versucht zu überprüfen, ob DWARF-Daten enthalten sind:

$ dwarfdump hello No DWARF information present in hello $

Ausführen unter 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) 

Antworten

3 Noname Sep 04 2020 at 18:19

Ich beantworte meine eigene Frage selbst, basierend auf einem Vorschlag von @Michael Petch, der die Person war, die tatsächlich die Grundursache gefunden hat.

Das Problem war , dass ich mit ldmit -sdem Mittel „alle Streifen“, einschließlich Debug - Symbole, also ich meine eigene Anstrengung zu untergraben.

Die richtigen Befehle sollten sein:

nasm -g -F dwarf -f elf64 hello.asm
ld -o hello hello.o

Nun mit 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) $