MacOS下撰写汇编代码(使用yasm)
在macos下使用homebrew
来安装yasm
:
$ brew info yasm
安装命令:
$ brew install yasm
...
🍺 /usr/local/Cellar/yasm/1.3.0_2: 45 files, 3MB
撰写汇编代码如下(::参考自::NASM Hello World for x86 and x86_64 Intel Mac OS X):
; /usr/local/bin/nasm -f macho64 64.asm && ld -macosx_version_min 10.7.0 -lSystem -o 64 64.o && ./64
global start
section .text
start:
mov rax, 0x2000004 ; write
mov rdi, 1 ; stdout
mov rsi, qword msg
mov rdx, msg.len
syscall
mov rax, 0x2000001 ; exit
mov rdi, 0
syscall
section .data
msg: db "Hello, world!", 10
.len: equ $ - msg
把上面的代码命名为hello.s
,使用yasm
进行编译:
$ yasm -f macho64 hello.s
得到hello.o
:
$ ls hello.o
hello.o
$
使用objdump
查看.o
文件里的实际汇编代码:
$ objdump -d -x86-asm-syntax=intel hello.o
解码后看到指令如下:
接下来把上面的hello.o
使用ld
命令进行链接,生成实际的可执行文件:
$ ld -e start -macosx_version_min 10.13.0 -static -o hello hello.o
执行上面的命令得到hello
可执行文件,执行这个文件的结果如下:
以上是一个macos环境下汇编语言的编译环境的介绍。