2009-04-07 FreeBSD assembler
I like assembler as it is very simple to learn but you should know how works your HardWare.
At this moment on my computer I have FreeBSD7.1. That whay i will write some examples about assembler for FreeBSD. With some little modifications that code also can be launched on Linux machines. Ou I forget assembler will oriented on Intel architecture. Don't forget AMD also understand Intel commands.
Tools
Simple programm
Hello world
Hello world + libc
C + asm
Links where is somthing useful
Files
Open File
2009-09-04 FreeBSD assembler open file
Here code for opening file, reading from it and close it. At beginig i have thinked taht it will be complicated. But it was easy and interesting as C. Here is both C and asm code.
openfile.asm
;/usr/include/sys/syscall.h ;#define SYS_read 3 ;#define SYS_write 4 ;#define SYS_open 5 ;#define SYS_close 6 sys_read equ 3 sys_write equ 4 sys_open equ 5 sys_close equ 6 o_rdonly equ 0 format ELF section '.text' executable public _start _start: ;int fid = open("file.txt",O_RDONLY); push o_rdonly push f mov eax, sys_open push eax int 0x80 add esp, 4*3 ; clear stack after interupt mov dword [f_id], eax ;read( fid , &buf[0] , 12 ); push f_buf_len push f_buf push eax mov eax, sys_read push eax int 0x80 add esp, 4*4 ;write( 1 , &buf[0] , 12 ); push f_buf_len push f_buf push 1 mov eax, sys_write push eax int 0x80 add esp,4*3 ;close( fid ); push dword [f_id] mov eax, sys_close push eax int 0x80 add esp, 4*2 ;exit from programm xor eax, eax ;eax = 0 push eax inc eax ;eax = 1, sys_exit int 80h ;system interupt section '.data' writeable f db "file.txt",0 f_len = $-f f_buf db 12 dup 0 f_buf_len = $-f_buf f_id dd 0
fasm openfile.asm openfile.o
ld openfile.o -o openfile
c.c
#include <fcntl.h> int main() { int fid = open("file.txt",O_RDONLY); char buf[12]; read( fid , &buf[0] , 12 ); write( 1 , &buf[0] , 12 ); close( fid ); return 0; }
gcc c.c -o c
file.txt
Only text!!!