Buenas :-* Estoy pasando un pequeño código que usa la sintaxis de intel a AT&T pero hay uno que se me resiste:
__asm("movl dword ptr args, %eax");
El error que me da el compilador del Dev C++ es:
Citarjunk `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
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
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!
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
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.
Una correción ortografica a arkangel es EIP ( IP ) no EPI :P
EPI ->(http://www.misscompras.com/uploaded/normal/peluche_epi_que_risa.jpg)
Gracias! :)