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.
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)