请原谅我,因为我在这里还是个新手,但我正在尝试使用 gdb 调试 x86 汇编。
ex10.asm
global main
extern printf
section .data
msg db "Testing %i...", 0x0a, 0x00
main:
push ebp
mov ebp, esp
push 123
push msg
call printf
mov eax, 0
mov esp, ebp
pop ebp
ret
编译并链接以下内容:
nasm -f elf32 -F dwarf -g ex10.asm -o ex10.o
gcc -m32 -gdwarf ex10.o -o ex10
ex10.o 看起来带有调试符号
$ objdump --syms ./ex10.o | grep debug
00000000 l d .debug_info 00000000 .debug_info
00000000 l d .debug_abbrev 00000000 .debug_abbrev
00000000 l d .debug_line 00000000 .debug_line
ex10似乎没有调试符号
$ objdump --syms ./ex10 | grep debug
----returns nothing----
运行 gdb ./ex10 的结果如下:
$ gdb ./ex10
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2
This GDB was configured as "x86_64-linux-gnu".
Reading symbols from ./ex10...
(No debugging symbols found in ./ex10)
在这之后,我不太确定该如何查看。有任何建议或需要提供的信息吗?
此外,还有nasm版本。
$ apt list --installed | grep nasm
nasm/focal,now 2.14.02-1 amd64 [installed]
main:
前面加上section .text
行。 - ssbssa