【发布时间】:2016-10-21 02:52:21
【问题描述】:
我正在尝试在我的 64 位 Macbook Pro 上学习 NASM。我有以下代码,我试图将变量的值分配给初始化变量。
global start
default rel
section .data
a: dq 1
section .bss
b: resq 1
section .text
start:
mov rax, a
mov [b], rax
代码编译并链接,但在运行时会生成bus error。有没有人对如何克服这个有任何想法?
【问题讨论】:
-
您需要正确结束程序。另外,学习使用调试器。
-
只需使用作为 OS X 一部分的
lldb。 -
在 OS/X 上,您应该将
lldb视为调试器(至少从一开始)。您可能还想了解 OS/X 64-bit syscalls 。从该信息中,您将了解到要退出程序,您将执行类似mov eax, 0x2000001xor edi, edi ; Return exit value 0 to systemsyscall之类的操作。同样mov rax, a这一行可能应该是mov rax, [a],因为我认为您打算将四字值移动到内存地址a而不是它的地址。 -
syscall成功了,我一定会调查lldb -
顺便说一句,当您看到
BUS ERROR时,这通常意味着您正在尝试访问系统保留内存中程序可用范围之外的内存地址。有多种方法可以导致这种情况发生(正如迈克尔的回答解释了未能退出的结果)。您还会经常看到这种间接错误(例如,如果您尝试使用指针的值作为其地址等)
标签: macos assembly nasm x86-64 bus-error