Wie Debugging-Symbole in NASM-Code zum Debuggen mit GDB unter Windows enthalten?Wie können Debug-Symbole in NASM-Code zum Debuggen mit GDB unter Windows eingebunden werden?
Nachdem ich einige NASM Assembly codiert habe, möchte ich es mit GDB debuggen.
I zubauen und Verbindung mit den folgenden Befehle:
nasm -f win32 insertion_sort.asm
ld insertion_sort.obj
jedoch GDB Ausgang (gdb a
) ergibt:
Reading symbols from C:\Users\nze\Desktop\asm\sorting\insertion_sort\a.exe...(no debugging symbols found)...done.
In dem folgenden Code I nicht _array
gleichen Bezug kann:
(gdb) x/4xw _array
No symbol table is loaded. Use the "file" command.
(gdb) x/4xw array
0x1: Cannot access memory at address 0x1
Setzen Sie den Haltepunkt auch auf _exit
:
(gdb) break exit
Breakpoint 1 at 0x401464
(gdb) run
Starting program: C:\Users\nze\Desktop\asm\sorting\insertion_sort/insertion_sort.exe
[New Thread 5488.0x1c7c]
[New Thread 5488.0xc54]
[Inferior 1 (process 5488) exited with code 01]
GDB bewirkt, dass das Programm bis zum Ende nur laufen, wenn laufen ...
Was ist falsch?
Der Assembler-Code ist:
BITS 32
section .data
_array: dd 4, 2, 8, 6, 1
_len: equ ($ - _array)/4
section .text
global _start
_start:
push ebp
mov ebp, esp
xor ecx, ecx
_outer:
inc ecx
cmp ecx, _len
jge _exit
mov ebx, ecx
dec ebx
lea esi, [_array + ecx * 4]
lea edi, [_array + ebx * 4]
_inner:
cmp ebx, 0
jl _outer
mov eax, [edi]
cmp eax, [esi]
jle _outer
xchg eax, dword [esi] ; swap [esi] and [edi]
mov dword [edi], eax
sub esi, 4
sub edi, 4
dec ebx
jmp _inner
_exit:
mov esp, ebp
pop ebp
ret
Mein 'nasm' sagt: _valid Debug-Formate für 'win32' Ausgabeformat sind ('*' bezeichnet default): * null null Debug format_. Wenn Sie nicht etwas anderes sagen, können Sie nicht viel tun, außer Symbole global zu machen und Disassembly zu verwenden. – Jester
Würden Sie Beispielbefehle schreiben? – Mofaaz
Jester, warum muss ich Symbole global machen? – Mofaaz