Hey... saludos oootra vez a la comunidad de el hacker.net
Esta vez me comunico con ustedes a ver si me pueden ayudar a entender como manejar ciertas cosas de el lenguaje ENSAMBLADOR para arquitecturas IA-32.
Estoy programando para un proyecto de la universidad, un encriptador de datos en 4 metodos distintos, para realizar este encriptador necesito pedir como entrada LA RUTA DEL ARCHIVO A cifrar y el nombre del archivo que se va a generar con el codigo cifrado... el asunto es QUE NO TENGO NI IDEA DE COMO MANEJAR ARCHIVOS EN ENSAMBLADOR...
Podria alguien darme un tutorial de ARCHIVOS para IA-32 o mandarme un pequeño SCRIPT de como abrir archivos y leerlos CARACTER por CARACTER!!!... muchas gracias....
Para acceder al disco podes usar la interrupcion 13h, el tema que es a bajo nivel. Si estas programando sobre DOS usa la 21h. Mas info?,
Ralf Brown's Interrupt List (http://www.ctyme.com/rbrown.htm)
Para la gente interesada en el tema...
Logre resolver la duda con la ayuda de algunos compañeros de clases...
En ensablandor (en arquitectura IA-32, en la cual era mi duda) se pueden hacer llamadas a funcione spropias de C, en mi caso estoy programando en la consola de LINUX y simplemente se deben hacer los enlaces a las librerias o bibliotecas necesarias para poder hacer el uso a funciones como FOPEN y FGETC..
por ejemplo:
Para abrir un archivo simplemente se tiene le tiene que pasar como parametro a la funcion FOPEN el tipo de archivo que estas abriendo y el nombbre del archivo...
se hace asi:
push $r #se apila R indicando que es un archivo de Lectura (READ)
push ARCHIVO #es la etiquiera que contiene el nombre del archivo a leer
call fopen #se llama a la funcion de C FOPEN y recibe por parametro R y ARCHIVO
add $8,%ebp #Se libera el marco de pila...
esta funcion te va a retornar en el registro %EAX un apuntador a la direccion absoluta del archivo... pór lo cual se debe almacenar dicha variable en algun lado para no perder la referencia. (movl %eax,apuntador)
en el caso de leer caracter a caracer...
push apuntador
call fgetc
add $4,%ebp
En este caso en retorna el valor del caracter en %EAX
y puede validar el Fin de ARchivo cuando %EAX es igual a 0.
si se quiere leer todo un archivo se crea un ciclo que haga un recorrido hasta que %EAX sea igual a 0.
vale?..
Espero que les sirva a futuras personas que tengan la duda que yo tuve...
Cita de: <<The Joker>> en 1 Febrero 2006, 15:51 PM
Para la gente interesada en el tema...
Logre resolver la duda con la ayuda de algunos compañeros de clases...
En ensablandor (en arquitectura IA-32, en la cual era mi duda) se pueden hacer llamadas a funcione spropias de C, en mi caso estoy programando en la consola de LINUX y simplemente se deben hacer los enlaces a las librerias o bibliotecas necesarias para poder hacer el uso a funciones como FOPEN y FGETC..
por ejemplo:
Para abrir un archivo simplemente se tiene le tiene que pasar como parametro a la funcion FOPEN el tipo de archivo que estas abriendo y el nombbre del archivo...
se hace asi:
push $r #se apila R indicando que es un archivo de Lectura (READ)
push ARCHIVO #es la etiquiera que contiene el nombre del archivo a leer
call fopen #se llama a la funcion de C FOPEN y recibe por parametro R y ARCHIVO
add $8,%ebp #Se libera el marco de pila...
esta funcion te va a retornar en el registro %EAX un apuntador a la direccion absoluta del archivo... pór lo cual se debe almacenar dicha variable en algun lado para no perder la referencia. (movl %eax,apuntador)
en el caso de leer caracter a caracer...
push apuntador
call fgetc
add $4,%ebp
En este caso en retorna el valor del caracter en %EAX
y puede validar el Fin de ARchivo cuando %EAX es igual a 0.
si se quiere leer todo un archivo se crea un ciclo que haga un recorrido hasta que %EAX sea igual a 0.
vale?..
Espero que les sirva a futuras personas que tengan la duda que yo tuve...
Hola que tal, estuve buscando por ineternet y casualmente encontre este post que me ha servido porque es justo lo q estaba buscando, se q fue posteado hace mucho pero ojala aun puedan ayudarme, estaba haciendo lo del fgets para leer caracter a caracter d una archivo y bueno resulta que queiro leer todo el archivo y llevar un contador para luego hacer una copia del archivo. Tengo esto:
# leer caracter a caracter
push apuntador
call fgetc
add $4,%ebp
En este caso en retorna el valor del caracter en %EAX
y puede validar el Fin de ARchivo cuando %EAX es igual a 0.
si se quiere leer todo un archivo se crea un ciclo que haga un recorrido hasta que %EAX sea igual a 0.
# movl $1, %ebx # %ebx=0
# addl aux, %ebx # aux = aux + %ebx
# While
while:
cmp $0, %eax
je endwhile
addl p, %ebx # aux = aux + %ebx
jmp while
# End While
endwhile:
pushl %eax
pushl %ecx
pushl %edx
call Metodo1
------------------------------
bueno si hago esto:
# leer caracter a caracter
push apuntador
call fgetc
add $4,%ebp
no m da error
Pero si hago el ciclo while m sale una violacion de segmento
Podrian ayudarme xfis!!
Yo lo puedo realizar en ASM de Linux o mas bien FreeBSD te sirve???
Muevo el tema al foro de ASM
Saludos
Con miedo de equivocarme lo digo a si que mejor esperar confirmacion ya que muy pocas veces eh trabajado con este tipo de sintaxis :P
# While
while:
cmp $0, %eax
je endwhile
addl p, %ebx # aux = aux + %ebx
jmp while
# End While
eax nunca se modifica osea que si eax no es 0 cuando entra nunca lo va a ser y se convierte en un bucle infinito
Si te da una excepcion depuralo con gdb (sin un codigo que genere ejecutable ni lo veo).