如何在NASM代码中包含调试符号,以便在Windows上使用GDB进行调试?

时间:2016-08-04 15:38:00

标签: debugging assembly gdb nasm mingw32

  

如何在NASM代码中包含调试符号,以便在Windows上使用GDB进行调试?

编写了一些NASM程序集后,我想使用GDB进行调试。

我使用以下命令进行汇编和链接:

nasm -f win32 insertion_sort.asm    
ld insertion_sort.obj

但是,启动GDB(gdb a)会产生:

Reading symbols from C:\Users\nze\Desktop\asm\sorting\insertion_sort\a.exe...(no debugging symbols found)...done.

在下面的代码中,我无法像_array那样引用:

(gdb) x/4xw _array
No symbol table is loaded.  Use the "file" command.
(gdb) x/4xw array
0x1:    Cannot access memory at address 0x1

另外,在_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在运行时只运行程序...

有什么问题?

汇编代码是:

    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

1 个答案:

答案 0 :(得分:-1)

您是否尝试过包含Windows可用的调试信息(Codeview 8)?

$ nasm -gcv8 -f win32 -o insertion_sort.o insertion_sort.asm $ gcc -m32 -o insertion_sort.exe insertion_sort.o