OS Xでアセンブリからシステムコール呼び出し
とりあえずのhello world。
.file "hello.S" .data msg: .ascii "hello world\n" len = . - msg .text .globl start start: # call write(1, $msg, $len) pushl $len pushl $msg pushl $1 lea -4(%esp), %ecx # stack pointer - 4 movl $call_exit, %edx # return address movl $4,%eax # system call number of 'write' sysenter call_exit: # call exit(0) pushl $0 lea -4(%esp), %ecx movl $0, %edx # meaningless movl $1, %eax # system call number of 'exit' sysenter
実行可能バイナリを作るには
as -o hello.o hello.S && ld -o hello hello.o
でOK。
だったのが、xnuでは
となっていて、また一つ違いの分かる人になれて良かったです。