1
我想在GNU彙編器爲Mac OS X編寫Hello World,但它可以打印「Hello World」之前的總線錯誤。麻煩讓你好世界/天然氣/ Mac OS X的工作
.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彙編程序維基百科page上的示例程序,但它也是總線錯誤。
我向蘋果提交了一個錯誤報告,因爲它的GNU彙編器過時了(如1.38)。他們說要改用clang。
我在做什麼錯?
規格:
- ld64-134.9
- 鐺4.1
- 的Xcode 4.5
- 的Mac OS X 10.8.2
- 的MacBook Pro 2009年
任何我們可以得到'len'工作的方式? – mcandre
以及我已經嘗試使用'$ -msg',然後是'。-msg',但是如果你想在* nix上有一個彙編環境,我可以在我的答案中添加一個我認爲更容易實現的工作示例;通過MacPorts和NASM。 –
@mcandre如果你想看看我是如何設置我的程序集環境的,或者想看看如何爲mac創建一個通用的二進制文件,我已經上傳了一個zip文件,所有的代碼都在公共領域[link](https:// docs.google.com/open?id=0B49KRMcMpMV1MnhqMzZVOHBfeFE) –