[Resuelto] C++ + ASM

Iniciado por Miseryk, 19 Abril 2012, 05:24 AM

0 Miembros y 1 Visitante están viendo este tema.

Miseryk

Hola, en C++ abrí una etiqueta asm como __asm{}, en la cual dentro quise hacer lo siguiente:

__asm
{
    .... //CÓDIGO

   mov dword ptr [ebx], RetFakeSinPrologo
   .... //MÁS CÓDIGO

RetFakeSinPrologo:
  jmp eax

  .... //MÁS CÓDIGO
}

En la línea del mov dword obtengo el error: "error C2415: improper operand type", en ASM puedo hacerlo así, acá hay alguna forma de lograr éso?

Desde ya muchas gracias.
Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It's never too late to change our luck
So, don't let them steal your light
Don't let them break your stride
There is light on the other side
And you'll see all the raindrops falling behind
Make it out tonight
it's a revolution

CL!!!

david_BS

#1
si eso cuando los dos operandos son una referencia de contenido de memoria, es decir, estás tratando de hacer algo prohibido.


fijate así,


void func(){

DWORD addressx = (DWORD)&ExitProcess;
//DWORD RetFakeSinPrologo;

__asm{

mov edx, RetFakeSinPrologo
mov dword ptr [ebx],edx

mov eax, addressx
RetFakeSinPrologo:
jmp eax;
}
}



es un ejemplo para que veas como se compila..

EDIT
ah y la referencia a ebx debería ser en tu código un puntero por ejemplo DWORD*, por si no sabías.

EDIT 2
y por supuesto exitprocess requiere que se pase un parámetro por lo que deberías usar push+call y no jmp, que se usa para funciones naked y cuando la pila no sufre alteraciones (por el tema de los parámetros)