Bueno, por fin cuando ya estoy metido de lleno en el mundo de programación con asm, se me presentan los tipicos problemas de logica por falta de conocimiento, que me pasaron cuando estuve en Basi, en Java y en C++.
Bueno el codigo que me deducido es el siguiente:
section .data
hello db 'Hello, world!',10 ; Our dear string
helloLen equ $ - hello ; Length of our dear string
dataSecond db 'Datos escritos correctamente',10
dataLen equ $ - dataSecond
file db '/root/archivo.txt',10
section .text
global _start
_start:
pop ebx
pop ebx
pop ebx ;arg[3] o el directorio del archivo a escribir en ebx
mov eax,8 ; Syscall a creat
mov ecx,00644Q ; Permisos de lectura en Octal (rw_rw_rw_)
int 0x80 ; Llamada al kernel de Linux
; Ahora tenemos el file descriptor o handler del archivo selecionado en ebx
test eax,eax ; Igualamos si el file descriptor es correcto
js skipWrite
call fileWrite ; Primer procedimiento de escritura
call fileWSegundo ; Segundo procedimiento de escritura
skipWrite:
mov ebx,eax ; Guardamos el error en ebx
mov eax,1 ; Syscall 1 - Finalizar ejecucion
int 0x80 ; llamamos al kernel
; proc fileWrite - write a string to a file
fileWrite:
mov ebx,eax ; sys_creat devuelve un handler de archivos en eax, lo ponemos en ebx
mov eax,4 ; sys_write
; ebx is already set up
mov ecx,hello ; La cadena de texto en ecx, como tercer argumento de la función
mov edx,helloLen ; la length de nuestra cadena definida como constante con equ
int 0x80
fileWSegundo:
mov ebx,eax ; sys_creat devuelve un handler de archivos en eax, lo ponemos en ebx
mov eax,4 ; sys_write
mov ecx,dataSecond
mov edx,dataLen
int 0x80
mov eax,6 ; sys_close
int 0x80
ret ; No se para que sirve pero lo he visto en mas programas :S
; endp fileWrite
La cosa es que no me escribe dicho archivo, he querido crear dos procedimientos para escribir por separado, por mero aprendizaje, el ver que puedo separar la runtime en varios procedimientos, no mas que eso.
Alguien me podria orientar? Y explicarme que hace el ret :P
Te recomiendo conseguir algun libro o varios tutoriales en su defecto (no es lo mismo claro), ret:
http://pdos.csail.mit.edu/6.828/2005/readings/i386/RET.htm
He leido sobre calls jumps y procedimientos, y en teoria no hay nada mal en lo que he codeado :S
Solo he visto que no haga un Jmp o JE a un proc donde haya ret pues dice que se acabará el programa :S
Saludos
¿Ya viste para que sirve ret? En la funcion fileWrite falta ... depuralo.
Muy cierto ;) Ves un pequeño error ;)
Gracias por aguantar a este pesado, siempre eternal idol, user ejemplar ;)
Saludos