Test Foro de elhacker.net SMF 2.1

Programación => Programación General => 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;


asm(
   ".intel_syntax noprefix;"
   "mov eax, dword ptr args;"
   "add eax, temp;"
   "push [eax];"
);


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.


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


asm
{
mov  eax, dword ptr args
add  eax, temp
push [eax]
}



__asm__(
"movl $args, %eax #;"
"addl $temp, %eax;"
"push (%eax);"
);


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


#include <stdio.h>

int main() {
int temp = 4;
int temp2 = 5;
int total = 0;

__asm__ __volatile__("movl %1, %0;"
   "addl %2, %0;"
   : "=r" (total)
   : "r" (temp), "r" (temp2)
   : "0");

  printf("temp: %i, temp2: %i - total: %i\n", temp, temp2, total);
          return 0;
}


gracias, saludos!