使用gdb调试程序集(NASM)

时间:2018-02-24 04:08:22

标签: gdb

我正在尝试使用gdb调试一些程序集,我遇到了一些问题。一旦我输入gdb,我就无法添加断点,并且文件命令似乎不起作用。确切的输出位于底部。我试过寻找答案,但似乎都没有用。我正在运行Ubuntu 17.10

main.asm中

section .text
global _start
_start:
    mov ecx, string
    call printStr
    exit:
    mov eax, 1
    mov ebx, 0
    int 0x80

    printStr:
    pusha
    cmp byte [ecx], 0
    je breakPrintStr
    mov eax, 4
    mov ebx, 2
    mov edx, 1
    int 0x80
    add ecx, 1
    jmp printStr
    breakPrintStr:
    popa
    ret
section .data
    string db 'Hello, World!',0xa,0

生成文件

file = main
compile: $(file).asm Makefile
    nasm -g -f elf -F dwarf $(file).asm
    ld -m elf_i386 -s -o $(file) $(file).o
    rm $(file).o
    chmod +x $(file)

然后我使用

启动gdb
gdb main

(gdb) file main

结果

Reading symbols from main...(no debugging symbols found)...done.

(gdb) b _global

结果

No symbol table is loaded.  Use the "file" command.
Make breakpoint pending on future shared library load? (y or [n])

1 个答案:

答案 0 :(得分:0)

搜索后我终于明白了。 Corrected的makefile如下:

file = main
compile: $(file).asm Makefile
    nasm  -g -f elf -F dwarf $(file).asm
    ld -m elf_i386 -o $(file) $(file).o
    rm $(file).o
    chmod +x $(file)