ARCHIVOS EN ENSAMBLADOR IA-32 <<URGENTE>>

Iniciado por <<The Joker>>, 23 Enero 2006, 05:52 AM

0 Miembros y 1 Visitante están viendo este tema.

<<The Joker>>

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....


Ivanchuk

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
Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org

<<The Joker>>

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...

dicarola

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!!

AlbertoBSD

Yo lo puedo realizar en ASM de Linux o mas bien FreeBSD te sirve???

Muevo el tema al foro de ASM

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

YST

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

Código (asm) [Seleccionar]

# 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


Yo le enseñe a Kayser a usar objetos en ASM

Eternal Idol

Si te da una excepcion depuralo con gdb (sin un codigo que genere ejecutable ni lo veo).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón