我最近才开始学习汇编(NASM)。我正在学习的书是为32位cpu编写的,但我的计算机是64位的。
我有一个放入文件的“ sandbox.asm”文件,然后在组装后在gdb中运行该程序以查看寄存器值以及每一行的内容,等等。
有时我会收到我不了解的gdb错误。
这是我的sandbox.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'处停止。)>
$ gdb sandbox (gdb) b 9 Breakpoint 1 at 0x400082: file sandbox.asm, line 9. (gdb) b 10 Breakpoint 2 at 0x40008c: file sandbox.asm, line 10. (gdb) b 11 Breakpoint 3 at 0x400096: file sandbox.asm, line 11. (gdb) r Starting program: /home/gucci/CODE.d/ASMBLY.d/sandbox.d/sandbox Breakpoint 2, 0x000000000040008c in _start () (gdb) i r rax 0xcc 204 rbx 0x3 3 [...] (gdb) c Continuing. Program received signal SIGSEGV, Segmentation fault. 0x000000000040008f in ?? () (gdb) i r rax 0x264 612 rbx 0x3 3 [...] (gdb) c Continuing. Program terminated with signal SIGSEGV, Segmentation fault. The program no longer exists.
204来自哪里?至少要乘以3并将结果放入rax(612)。
为什么我也会出现段错误?我尝试将32位(eax),16位(ax)甚至8位寄存器用于'mov'指令,但是gdb根本无法与它们一起工作。
即使源文件位于同一目录中,$ gdb -tui sandbox也不起作用,所以我在一个终端中打开了gdb,而在另一终端中打开了ed。
是否有一个专门用于汇编的更好的调试器(而不是像gdb这样的c调试器?
感谢您的帮助。
我最近才开始学习汇编(NASM)。我正在学习的书是为32位cpu编写的,但是我的计算机是64位的。我有一个`sandbox.asm'文件,我将代码放入其中,然后...
很抱歉,我刚刚找到了解决方法。