Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: Nork en 24 Mayo 2009, 15:38 pm



Título: Errores de compilación de pasar de intel a AT&T
Publicado por: Nork en 24 Mayo 2009, 15:38 pm
Buenas :-* Estoy pasando un pequeño código que usa la sintaxis de intel a AT&T pero hay uno que se me resiste:

Código
  1. __asm("movl  dword ptr args, %eax");

El error que me da el compilador del Dev C++ es:

Citar
junk `ptr args' after epresionje

He buscado por google pero no he encontrado nada de momento,

alguien tiene alguna idea?

Gracias!


P.D: No sé porque no sale bien el error :S Debería salir ex-pres-sion pero no sé porque se traduce a epresionje xD


Título: Re: Errores de compilación de pasar de intel a AT&T
Publicado por: Arkangel_0x7C5 en 24 Mayo 2009, 16:38 pm
es por lo de: dword ptr

Seria movl 8(%ebp), %eax

si args es el primer argumento, si es el segundo seria 0xC(%ebp)
Si es una variable local entonces seria a partir de -4(%ebp) hacia abajo.
Y si es una gloval ($args).

Saludos


Título: Re: Errores de compilación de pasar de intel a AT&T
Publicado por: Nork en 24 Mayo 2009, 17:12 pm
No entiendo, si dword ptr hace referencia a los argumentos que tiene que ver ebp? Y como sé que número menor que -5 tengo que poner?

Soy prácticamente nulo en asm y me pierdo en según que cosas :/


Gracias!


Título: Re: Errores de compilación de pasar de intel a AT&T
Publicado por: ny0x en 24 Mayo 2009, 17:48 pm
porque windows usa stdcall y atraves de esta los parametros se pasan en la pila, y ebp sirve como indice para apuntar a los valores guardados en la pila. ebp + 8 primer parametro ebp + 12 segundo ebp + 4 es la direccion de retorno. pero como es at&t es 12(%ebp) 8(%ebp).
bueno eso tengo entendido :P


Título: Re: Errores de compilación de pasar de intel a AT&T
Publicado por: Arkangel_0x7C5 en 24 Mayo 2009, 17:55 pm
pues mira, ebp marca siempre el principio del espacio de pila. A medida que haces push el valor de esp, que marca la cima de la pila disminuye.

cuando haces:

push Param2
push Param1
call    MiFuncion

El call pone en la pila eip que luego usara el ret para volver, eso son esp+4 para el primer parámetro.
Después se hace push ebp, lo que son entonces esp+8 para el primer parámetro.

Y luego se copia el valor de esp en ebp.por lo que el primer parámetro es siempre ebp+8.

Y las locales, lo que se hace es restarle el tamaño de las var local a esp. Con lo que si tienes una variable local que ocupa 4bytes y es la primera, la encontraras en ebp-4. si es la segunda pues estara en ebp-(sizeVar1+sizeVar2).

Esto son cosas que se ven muy claras con el OllyDbg al depurar un programa que tu mismo has hecho en asm.

Saludos

EDITO:Ya esta YST tildes y todo.


Título: Re: Errores de compilación de pasar de intel a AT&T
Publicado por: YST en 24 Mayo 2009, 18:53 pm
Una correción ortografica a arkangel es EIP ( IP ) no EPI :P 


Título: Re: Errores de compilación de pasar de intel a AT&T
Publicado por: bizco en 24 Mayo 2009, 20:59 pm
EPI ->(http://www.misscompras.com/uploaded/normal/peluche_epi_que_risa.jpg)


Título: Re: Errores de compilación de pasar de intel a AT&T
Publicado por: Nork en 25 Mayo 2009, 21:11 pm
Gracias!  :)