2014年7月3日 星期四

在64 bits OS上編譯nasm 組合語言

最近作者正在看nasm,某個assembly 的實作,因為作業系統都升到64 bits了,要編譯asm code需要一些額外處理,以下記錄一下處理步驟,我是用archlinux,不過我想其他作業系統應該也差不多:

首先作者有提供asm_io.asm,這要先編譯,先安裝作者的nasm組譯器:
sudo pacman -S nasm

組譯:
nasm -f elf -d ELF_TYPE asm_io.asm
nasm -f elf first.asm
這裡的first 是我們自己寫的asm code

下一步要用gcc,原本書中是建議
gcc -o first driver.c first.o asm_io.o
不過方才都是用elf32去組譯的,所以要改成:
gcc -m32 -lc -o first driver.c first.o asm_io.o

這裡要安裝:
sudo pacman -S gcc-multilib gcc-libs-multilib
然後我還遇到找不到shared library libisl的問題,可能是gcc-multilib跟不上isl的更新,這個用symbolic link到libisl.13.0.0的方式解決

之後就可以完成編譯了,不過也許學著寫64 bits的assembly比較治本?

沒有留言:

張貼留言