I want to compile and execute a very simple program in 64 bit.
section .text
global _start
_start:
mov rdx,len
mov rcx,msg
mov rbx,1
mov rax,4
int 0x80
mov rbx,0
mov rax,1
int 0x80
section .data
msg db "Hello, world!",0xa
len equ $ - msg
The line to compile it:
yasm -f elf64 -g dwarf2 example.asm
$ yasm --version
yasm 1.2.0
also tried with another format macho[|32|64], elf[|32] bin
none of them succeed.
The line to link it:
gcc -o example example.o
ld: warning: ignoring file example.o, file was built for unsupported file format ( 0x7f 0x45 0x4c 0x46 0x 2 0x 1 0x 1 0x 0 0x 0 0x 0 0x 0 0x 0 0x 0 0x 0 0x 0 0x 0 ) which is not the architecture being linked (x86_64): example.o
Undefined symbols for architecture x86_64:
"_main", referenced from:
start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
$ gcc --version
i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
also tried with some options for gcc
such as -m64 -arch x86_64
.
I have been working on assembly language for OS X using yasm
. The assemble line is:
yasm -f macho64 -l file.lst file.asm
Then link with ld
:
ld -o file file.o
You should use start
rather than _start
on OS X.
Following that there is a problem using gdb. There does not seem to be any debug format available for OS X.
You might be interested in trying my IDE named ebe. I have managed to get breakpoints and debugging to work fairly well. Currently I have some issues with debugging floating point code. gdb doesn't seem to be aware of the ymm registers and the default version of gdb had the parts of the xmm registers backwards.
You might like ebe. Download it from sourceforge using
git clone git://git.code.sf.net/p/ebe-ide/code ebe
It requires xterm, python, tkinter and pmw (a python library).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With