Skip to content

Instantly share code, notes, and snippets.

@everblut
Created February 21, 2012 15:36
Show Gist options
  • Save everblut/1877058 to your computer and use it in GitHub Desktop.
Save everblut/1877058 to your computer and use it in GitHub Desktop.
Creador de archivos
section .data
line db "hola esto es una linea de prueba",10
len equ $ - $$
section .bss ;Block Started by Symbol
buffer: resb len
file: resb 4
num: resb 4
section .text
global _start
_start:
pop ebx ;saca el ultimo dato de la pila, en este caso el # de argumentos
cmp ebx,3 ;juzga ebx para ver cuantos argumentos se pasaron
jne error ;salta si no es igual o es cero
pop ebx ;saca el siguiente, es el nombre del ejecutable
pop ebx ;saca el siguiente, es el argumento[1].
cmp ebx,0 ;compara si no esta vacio
jbe error ;salta si no es 1.
mov [file], ebx ;lo que esta en ebx, muevelo a file, uso de corchetes para contenidos, no punteros.
mov eax,8 ;llamada creat
mov ecx,511 ;permisos para lectura y de ejecuccion
int 0x80
mov eax,5 ;llamada sys_open
mov ebx,[file] ;nombre del archivo
mov ecx,1 ;1 = Escritura, 0 = Lectura
int 0x80
mov ebx,eax ;guarda el file descriptor en EBX, ya que el sistema nos lo regresa en EAX
mov eax, 4 ;sys_write
mov edx, len ;mensaje
mov ecx, line ;size
int 0x80
mov eax, 6 ;sys_close
int 0x80
mov eax, 5 ;sys_open file with filedescriptor in ebx
mov ebx, [file] ;archivo que se abrira
mov ecx, 0 ;O_RDONLY zero es para solo lectura
int 0x80
cmp eax, 0 ;checa que el filedescriptor en EAX sea mayor a 0
jbe error ;no se abrio el archivo
mov ebx, eax ;guarda el file descrip
;; leer desde el archivo al .bss buffer para desplegarlo en pantalla
mov eax, 3 ;sys_read
mov ecx, bssbuf ;puntero a la variable buffer
mov edx, len ;size de los datos a leer.
int 0x80
js error ;Error de lectura
cmp eax, len ;checa si no tubo una lectura menor a la requerida por len
jb close
mov eax, 4 ;sys_write
push ebx ;save file descriptor en pila for sys_close
mov ebx, 2 ;file descriptor de stderr que es ilimitada
mov ecx, buffer ;puntero al buffer con data
mov edx, len ;size de los datos
int 0x80
pop ebx ;recupera filedescriptor en ebx de la pila
close:
mov eax, 6 ;sys_close file con
int 0x80
mov eax, 1 ;sys_exit
mov ebx, 0 ;ok
int 0x80
error:
mov ebx, eax ;exit code = sys call result
mov eax, 1 ;sys_exit
int 0x80
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment