【发布时间】:2014-01-15 05:41:07
【问题描述】:
尝试在我的 Macbook Pro(Intel i7,64 位)上运行程序集,但遇到了一个奇怪的错误。
这是一个基本的“你好,世界!”程序只使用系统调用。
SECTION .text
global start
start:
mov rax, 2
shl rax, 24
add al , 4
mov rdi, 1
mov rsi, Msg
mov rdx, Len
syscall
mov al , 1
mov rdi, 0
syscall
SECTION .data
Msg db `Hello, world!\n`
Len: equ $-Msg
使用 NASM 2.11 组装 控制台命令:
nasm -f macho64 -o main.o main.s
ld main.o
它打印“Hello, world”和换行符,但随后返回 Bus Error: 10(错误的内存地址)。
但如果我这样做:
mov rax, 2
shl rax, 24
add al , 1
我没有收到总线错误。
问题是:为什么我不能使用“mov al, 1”为不同的调用更改 rax 的第一个字节
【问题讨论】:
-
不确定:也许系统调用不保留 rax?