Created
February 21, 2012 15:36
-
-
Save everblut/1877058 to your computer and use it in GitHub Desktop.
Creador de archivos
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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