[?] call que no llama a quien debería (AT&T)

Iniciado por Nork, 26 Mayo 2009, 19:43 PM

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

Nork

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 (asm) [Seleccionar]
movl %0, %%eax"::"g"(tem)
movl %%eax,%0"::"g"(buf)
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!!  :-*
C' Est La Vie

Eternal Idol

Mmm ... ¿Lo depuraste? ¿No estaras por casualidad tomando el contenido al que apunta eax para despues llamarlo?
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

Arkangel_0x7C5

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 (asm) [Seleccionar]

"call *%eax"


saludos

Nork

Cita de: Arcangel_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 (asm) [Seleccionar]

"call *%eax"


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)

Cita de: 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?

Pues la verdad no se como comprobar eso  :-\
C' Est La Vie

Eternal Idol

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

Nork

Cita de: 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.

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!
C' Est La Vie