【发布时间】:2015-01-09 16:53:56
【问题描述】:
我正在尝试使用 NASM 在 Mac 上的 64 汇编程序中编写一个简单的 helloworld。 每次我尝试运行它时都会收到此错误:
Illegal instruction: 4
这是我的代码:
section .text
global _main
_main:
mov rax, 4
mov rbx, 1
mov rcx, tekst
mov rdx, dlugosc
int 80h
mov rax, 1
int 80h
section .data
tekst db "Hello, world", 0ah
dlugosc equ $ - tekst
我正在编译:
nasm -f macho64 HelloWorld.asm
我正在链接:
ld -o HelloWorld -arch x86_64 -macosx_version_min 10.10 -lSystem -no_pie HelloWorld.o
非常感谢任何帮助。
【问题讨论】:
-
尝试在调试器下运行。
-
-macosx_version_min和10.10之间应该有一个=,对吧? -
如果this page 可信,那么您使用了错误的系统调用号并将您的参数放入错误的寄存器中。
-
@ChrisStratton 我反汇编了编译版本,似乎将所有 64 位寄存器(rax、rbx)更改为 32 位寄存器(eax、ebx),但 rcx 除外。
-
@harold 不,不应该有“=”之间。
标签: macos assembly nasm x86-64 ld