Mac OSX用のGNUアセンブラでHelloWorldを書き込もうとしていますが、「HelloWorld」を出力する前にバスエラーが発生します。
.global start
.data
.equ stdout, 1
.equ sys_write, 4
.equ sys_exit, 1
.equ kernel, 0x80
msg: .asciz "Hello World!\n"
.equ len, .-msg
.text
start:
push $len
push $msg
push $stdout
mov $sys_write, %eax
sub $4, %esp
int $kernel
add $4 + $4 * $3, %esp
push $0
mov $sys_exit, %eax
sub $4, %esp
int $kernel
痕跡:
$ clang -c -o hello.o hello.s
$ ld -o hello -macosx_version_min 10.6 hello.o
$ ./hello
Bus error: 10
$ gdb hello
(gdb) run
Starting program: /Users/andrew/Desktop/src/mcandre/gas/hello/freebsd/hello
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x0000000000002000
0x0000000000002000 in msg ()
私はいくつかのことに基づいてコードを作成しています。
セマンティクスはNASM/Mac OS Xから、構文はGas/Linuxから取得しました。
GNU Assembler Wikipediaページのサンプルプログラムも試しましたが、バスエラーも発生しました。
GNUアセンブラがひどく古くなっているため(1.38として)、Appleにバグレポートを提出しました。彼らは代わりにclangを使うと言った。
私は何が間違っているのですか?
仕様:
- ld64-134.9
- clang 4.1
- Xcode 4.5
- Mac OS X 10.8.2
- MacBook Pro 2009