Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simple asm program with yasm in MacOS Mountain Lion

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.

like image 526
ssedano Avatar asked Oct 22 '12 18:10

ssedano


1 Answers

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).

like image 87
Ray Seyfarth Avatar answered Sep 20 '22 19:09

Ray Seyfarth