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!!!