How to compile HelloWorld in Intel x86-32 on Mac OSX/FreeBSD
Compile in your Terminal:
The Code:
Find more here:
Compile in your Terminal:
nasm -o hello.tmp -f macho hello.s && ld -arch i386 -macosx_version_min 10.6 -no_pie -e _main -o hello.o hello.tmp && ./hello.o
The Code:
section .data ; constants stored here msg db "Hello World!", 0xa ; our string to be printed len equ $ - msg ; get the length of our string section .text ; labels stored here global _main ; specify our main function - (ld -e main) _syscall: ; label - system call - call kernel - how we print to the screen int 0x80 ret _main: ; label - technically int main() push dword len ; message length push dword msg ; message to write push dword 1 ; file descriptor - 1 - stdout mov eax, 0x4 ; system call number - 4 - system write call _syscall ; go to label(function call) - _syscall ; add esp,12 ;clean stack (3 arguments * 4) push dword 0 ; exit code - return 0 mov eax, 0x1 ; system call number (sys_exit) call _syscall ; go to label(function call) - _syscall
Find more here:
https://github.com/jaredsburrows/Assembly
How about using GNU tool chains? GNU gcc or GAS?
ReplyDelete