Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: HaX991 en 12 Mayo 2012, 12:40 pm



Título: ASM INLINE
Publicado por: HaX991 en 12 Mayo 2012, 12:40 pm
Hola a todos
estoy intentando insertar variables en asm inline gcc en windows tengo este code;

Código
  1. asm(
  2.   ".intel_syntax noprefix;"
  3.   "mov eax, dword ptr args;"
  4.   "add eax, temp;"
  5.   "push [eax];"
  6. );
  7.  

pero en las variables  "args" y "temp" el compilador me dice undefined reference to .... las variables estan declaradas y tal solo que no se como insertar variables en asm inline de gcc

uso: gcc -masm=intel code.c -o app.exe

...

gracias!


Título: Re: ASM INLINE
Publicado por: _Enko en 12 Mayo 2012, 15:09 pm
Podrias intentar compilar un programa de C, donde utilices los parametros de la ejecutable "args" a ver como los llama al depurar la aplicacion.

Luego, para "temp" tiene que estar declarada antes. Con asm inline no creo que puedas definir variables ya que no estarias accediento a la sección de datos.
Código:

int temp;
__asm{
mov temp, eax
}

Saludos


Título: Re: ASM INLINE
Publicado por: HaX991 en 13 Mayo 2012, 13:43 pm
sabrias como pasar asm de sintaxis intel a at&t?
es lo que necesito para meter codigo asm inline en gcc para windows
tengo esto

intento traducir esto, el de arriba es codigo intel y el otro at&t pero se que esta mal el mio

Código
  1. asm
  2. {
  3. mov  eax, dword ptr args
  4. add  eax, temp
  5. push [eax]
  6. }
  7.  
  8.  
  9.  
  10. __asm__(
  11. "movl $args, %eax #;"
  12. "addl $temp, %eax;"
  13. "push (%eax);"
  14. );
  15.  

en este ejemplo de at&t si sirve necesito pasar el puntero de esa forma pero no logro hacerlo

Código
  1. #include <stdio.h>
  2.  
  3. int main() {
  4. int temp = 4;
  5. int temp2 = 5;
  6. int total = 0;
  7.  
  8. __asm__ __volatile__("movl %1, %0;"
  9.   "addl %2, %0;"
  10.   : "=r" (total)
  11.   : "r" (temp), "r" (temp2)
  12.   : "0");
  13.  
  14.  printf("temp: %i, temp2: %i - total: %i\n", temp, temp2, total);
  15.          return 0;
  16. }
  17.  

gracias, saludos!