gpt4 book ai didi

linux - 使用断点和符号调试时的gdb问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:33:26 24 4
gpt4 key购买 nike

我用 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)

最佳答案

我解决了它,我只将位置部分 .data 更改为部分 .text 并且调试器工作。我不知道为什么,但现在 gdb 使用 .start。

关于linux - 使用断点和符号调试时的gdb问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53744380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com