Проблема GDB при отладке с точками останова и символами - PullRequest
0 голосов
/ 12 декабря 2018

Я пишу ассемблер с помощью Nasm, я хочу отладить программу, используя gdb, но она не работает, когда я ставлю точку останова и запускаю программу.

Программа компилируется нормально и тоже связывается, проблема в gdb.

Вот команды для компиляции:

 nasm -f elf64 -F dwarf -g   types.asm
 nasm -f elf64 -F dwarf -g   functions.asm
 nasm -f elf64 -F dwarf -g   Hello.asm
 ld -g -o Hello Hello.o functions.o types.o

Это файл, который я хочу отладить Hello.asm:

 %include "functions.asm"
 section .bss
     res: resb 1
     fout: resb 1

 section .text
    global _start:     ;must be declared for linker (ld)

 section .data
      msg db 'Hello, world!', 0xa  ;string to be printed
      len equ $ - msg     ;length of the string 
      filename db 'hello.txt'

  _start:               ;tells linker entry point
       mov ecx,5
       mov edx,4
       call sum
       mov [res],eax
       mov  edx,1     ;message length
       mov  ecx,res  ;message to write
       mov  ebx,1       ;file descriptor (stdout)
       mov  eax,4       ;system call number (sys_write)
       int  0x80        ;call kernel
       write_string msg,len
       create_file filename
       mov [fout],eax
       close_file [fout]


       call print_msg

       mov  eax,1       ;system call number (sys_exit)
       int  0x80       ;call kernel

  sum:
     mov eax,ecx
     add eax,edx
     add eax,'0'
     ret

Далее я открываю gdb:

gdb Hello
(gdb) break _start
Function «_start» not defined
¿Compilación de breakpoint pendiente hasta futura cargada de biblioteca compartida? (y or [n]) y     
 Punto de interrupción 1 (_start) pendiente.
(gdb) run  
 Starting program: /asm/Hello 
 9Hello, world!
 Hello, world!from another file
 [Inferior 1 (process 5811) exited with code 01]
 (gdb) 

1 Ответ

0 голосов
/ 12 декабря 2018

Я решил, я только меняю позицию section .data на section .text, и отладчик работает. Я не знаю почему, но теперь GDB принимает .start.

...