Test Foro de elhacker.net SMF 2.1

Programación => Programación General => ASM => Mensaje iniciado por: 70N1 en 12 Enero 2015, 02:52 AM

Título: asm en c++ (Devolver variable con return) ayuda.
Publicado por: 70N1 en 12 Enero 2015, 02:52 AM

Hola, de entrada decirles que no se ni pajolera idea de asm... por eso mi pregunta.

Como consigo hacer el return de la variable "primero" ?



char lanzar(){

char primero = 0;

__asm{

call des
des :
pop primero


}
return primero;
}
Título: Re: asm en c++ (Devolver variable con return) ayuda.
Publicado por: Eternal Idol en 12 Enero 2015, 05:34 AM
Moviendo el valor de primero al registro AL.
Título: Re: asm en c++ (Devolver variable con return) ayuda.
Publicado por: 70N1 en 12 Enero 2015, 14:44 PM
Me puedes poner el ejemplo bien comentado?.
Título: Re: asm en c++ (Devolver variable con return) ayuda.
Publicado por: MCKSys Argentina en 12 Enero 2015, 15:10 PM
Hola!

No entiendo bien qué quieres hacer:

Estás intentando devolver el valor que tiene la variable dentro de la función o la dirección de memoria en la que está?

Al ser una variable local, lo más probable es que esté en el stack, por lo que va a destruirse al salir de la función (en realidad no se destruye, pero esa dirección seguramente será machacada por el código siguiente.).

Si es por devolver el valor, como dijo Eternal Idol:

Código (c++) [Seleccionar]

char lanzar(){

char primero = 0;

__asm{
mov al, primero
}
}
Título: Re: asm en c++ (Devolver variable con return) ayuda.
Publicado por: 70N1 en 12 Enero 2015, 15:50 PM
Lo que intento es obfuscar este codigo.



DWORD prueba       = 0;

// *** The following code gets EIP register value and stores into primero
   __asm call andro
   __asm   andro:
   
   __asm   pop primero


prueba = (DWORD)(*(DWORD *)(--primero));
Título: Re: asm en c++ (Devolver variable con return) ayuda.
Publicado por: _Enko en 12 Enero 2015, 19:19 PM
las funciones retornan el valor en eax.

Si colocas:


...codigo obfuscado
mov al, valor
... codigo obfuscado
retn


Cuando alguien depure tu programa va a tener:

codigo
call tu_procedimiento ; con codigo obfuscado
<---- al tendrá el valor de retorno
codigo


No importa lo que pongas en la obfuscacion, el valor de retorno estará en eax.
Tendrás mas "suerte" usando variable global o pasando el parametro por referencia.

Saludos.