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环境下汇编语言的编译环境的介绍。

My Github Page: https://github.com/liweinan

Powered by Jekyll and Theme by solid

If you have any question want to ask or find bugs regarding with my blog posts, please report it here:
https://github.com/liweinan/liweinan.github.io/issues