Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: Nork en 26 Mayo 2009, 19:43 pm



Título: [?] call que no llama a quien debería (AT&T)
Publicado por: Nork en 26 Mayo 2009, 19:43 pm
Hola, aquí estoy otra vez con el jodido ASM y la sintaxis AT&T :P El problema ahora es que el call llama a una zona de memoria que se la saca de la manga (se la inventa), el trocito de código es éste:

Código
  1. movl %0, %%eax"::"g"(tem)
  2. movl %%eax,%0"::"g"(buf)
  3. lcall *(%eax)"

tem es una variable que contiene la dirección de un buffer que posteriormente tengo que ejecutar, entonces le paso esa dirección a eax luego para asegurarme que eax contenía tal dirección lo comprobé pasando el valor que tenía a la variable buf y hasta aquí todo correcto, la memoria pues está en eax correctamente (supongamos que la memoria es 0x3d00000)... luego PORQUE cuando hago un call *(%eax) me salta con un error de memoria diciéndome que:
Citar
"La instrucción en "0x00405458" hace referencia a la memoria en "0xffffffff". La memoria no se puede "read".

0x00405458?? Pero si tenía que ser 0x3d00000  :huh: Alguien sabe que estoy haciendo mal? Porque vale que no sepa apenas nada de asm pero madre mía lo que me está dando por culo 4 lineas de nada xD

S4ludos y gracias!!  :-*


Título: Re: [?] call que no llama a quien debería (AT&T)
Publicado por: Eternal Idol en 26 Mayo 2009, 21:19 pm
Mmm ... ¿Lo depuraste? ¿No estaras por casualidad tomando el contenido al que apunta eax para despues llamarlo?


Título: Re: [?] call que no llama a quien debería (AT&T)
Publicado por: Arkangel_0x7C5 en 26 Mayo 2009, 21:22 pm
es por los () que le dicen que lea el contenido de esa direccion y salte a el valor leido.

En fijate en el code que te pase, el call lo hacia asi:
Código
  1. "call *%eax"
  2.  

saludos


Título: Re: [?] call que no llama a quien debería (AT&T)
Publicado por: Nork en 26 Mayo 2009, 21:40 pm
es por los () que le dicen que lea el contenido de esa direccion y salte a el valor leido.

En fijate en el code que te pase, el call lo hacia asi:
Código
  1. "call *%eax"
  2.  

saludos

Sí, sí también lo he probado tal y como dices sólo que lo probé con los "()" y lo dejé así xD El problema igualmente es el mismo, un error de memoria (aunque en diferente posición según ponga los () o no)

Mmm ... ¿Lo depuraste? ¿No estaras por casualidad tomando el contenido al que apunta eax para despues llamarlo?

Pues la verdad no se como comprobar eso  :-\


Título: Re: [?] call que no llama a quien debería (AT&T)
Publicado por: Eternal Idol en 26 Mayo 2009, 21:53 pm
Por lo que comento Arcangel_0x7C5 es exactamente lo que te dije (la sintaxis de AT&T no la uso jamas) y que sean dos errores de memoria no importa ya que no son el mismo seguramente. Podes usar gdb para depurar tu programa.


Título: Re: [?] call que no llama a quien debería (AT&T)
Publicado por: Nork en 26 Mayo 2009, 21:58 pm
Por lo que comento Arcangel_0x7C5 es exactamente lo que te dije (la sintaxis de AT&T no la uso jamas) y que sean dos errores de memoria no importa ya que no son el mismo seguramente. Podes usar gdb para depurar tu programa.

Voy a intentar depurarlo a ver si saco algo o si no tendré que enviar un correo a Stallman que por lo visto los contesta y a ver si sabe que pasa xD

Gracias!