Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging gdb不使用NASM在所有断点处停止_Debugging_Assembly_Gdb_X86 64_Nasm - Fatal编程技术网

Debugging gdb不使用NASM在所有断点处停止

Debugging gdb不使用NASM在所有断点处停止,debugging,assembly,gdb,x86-64,nasm,Debugging,Assembly,Gdb,X86 64,Nasm,我最近才开始学习汇编(NASM)。我正在学习的这本书是为32位cpu编写的,但我的电脑是64位的 我有一个“sandbox.asm”文件,我将代码放入其中,然后在组装后,我在gdb中运行程序,查看寄存器值以及每行的内容等 有时我会在gdb中遇到我不理解的错误 这是我的沙盒。asm: 1 section .data 2 section .text 3 4 global _start 5 6 _start: 7 nop 8 ; test code

我最近才开始学习汇编(NASM)。我正在学习的这本书是为32位cpu编写的,但我的电脑是64位的

我有一个“sandbox.asm”文件,我将代码放入其中,然后在组装后,我在gdb中运行程序,查看寄存器值以及每行的内容等

有时我会在gdb中遇到我不理解的错误

这是我的沙盒。asm:

1   section .data
2   section .text
3   
4       global _start
5   
6   _start:
7       nop
8   ; test code below
9   mov rax,5
10  mov rbx,3
11  mul rbx
12  ; test code above
13      nop
14  
15  section .bss
一个足够简单的程序,5应该进入rax,3应该进入rbx,结果应该在rdx和rax中结束

但是gdb运行到最后,只在1个断点处停止(不确定它是否正在这样做,或者是否在“nop”处停止)

204来自哪里?至少3与之相乘,并将结果放入rax(612)

为什么我也会犯错误?我尝试使用32位(eax)、16位(ax)甚至8位寄存器作为“mov”指令的寄存器,但gdb根本不能很好地使用它们

而且,即使源文件位于同一目录中,“$gdb-tui sandbox”也无法工作,因此我在一个终端中打开了gdb,在另一个终端中打开了ed中的代码


是否有更好的调试器专门用于汇编(而不是像c一样的gdb)?

很抱歉发布,我刚刚找到了解决方案

我以前的makefile是:

1   sandbox: sandbox.o
2       ld -o sandbox sandbox.o
3   sandbox.o: sandbox.asm
4       nasm -f elf64 -g -F stabs sandbox.asm
但现在我把它改成:

1   sandbox: sandbox.o
2       ld -o sandbox sandbox.o
3   sandbox.o: sandbox.asm
4       nasm -f elf64 -g -F dwarf sandbox.asm
“侏儒”的命令让世界变得不同


现在gdb的行为与我期望的一样。

注意,您可以
stepi
(又称
si
)按指令单步执行,并使用
disas
。(或
layout reg
)。那么你就不需要任何调试信息了。您可以使用
starti
(在
\u start
处的第一条用户空间指令之前停止)在暂停状态下启动程序。请参阅下面的asm调试提示,为什么我也会出现segfault?-和
1   sandbox: sandbox.o
2       ld -o sandbox sandbox.o
3   sandbox.o: sandbox.asm
4       nasm -f elf64 -g -F dwarf sandbox.asm