Test Foro de elhacker.net SMF 2.1

Programación => Programación General => ASM => Mensaje iniciado por: Debci en 3 Julio 2010, 17:28 PM

Título: Problema al escribir archivo con sys_call numero 8
Publicado por: Debci en 3 Julio 2010, 17:28 PM
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:
Código (asm) [Seleccionar]
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
Título: Re: Problema al escribir archivo con sys_call numero 8
Publicado por: Eternal Idol en 3 Julio 2010, 20:21 PM
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
Título: Re: Problema al escribir archivo con sys_call numero 8
Publicado por: Debci en 3 Julio 2010, 23:43 PM
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
Título: Re: Problema al escribir archivo con sys_call numero 8
Publicado por: Eternal Idol en 4 Julio 2010, 00:27 AM
¿Ya viste para que sirve ret? En la funcion fileWrite falta ... depuralo.
Título: Re: Problema al escribir archivo con sys_call numero 8
Publicado por: Debci en 4 Julio 2010, 12:11 PM
Muy cierto ;) Ves un pequeño error ;)
Gracias por aguantar a este pesado, siempre eternal idol, user ejemplar ;)

Saludos