asm en c++ (Devolver variable con return) ayuda.

Iniciado por 70N1, 12 Enero 2015, 02:52 AM

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

70N1


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;
}
70N1

Eternal Idol

Moviendo el valor de primero al registro AL.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

70N1

Me puedes poner el ejemplo bien comentado?.
70N1

MCKSys Argentina

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
}
}
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


70N1

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));
70N1

_Enko

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.