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:
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!! :-*
Mmm ... ¿Lo depuraste? ¿No estaras por casualidad tomando el contenido al que apunta eax para despues llamarlo?
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:
"call *%eax"
saludos
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:
"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 :-\
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.
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!