Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





ayuda en c++

Iniciado por Julio0, 11 de Junio de 2019, 05:00:35 AM

« anterior - próximo »

Julio0

esto es el codigo en el que estoy trabajando para dll pero nose si me falta una variable o algo porque cuando le doy a inyectar al momento de activarlo no funciona y al hacerlo manualmente si porque sera?
#include <stdio.h>
#include <windows.h>
bool nombre = false; //ejemplo <nombre> nombre de lo que se va a modificar
bool salir = false;
void dll()
{
   while (salir) //bucle infinito (while 1 = true) variable salir es = a false osea a terminar el procceso
   {
      
     if (nombre) //si es verdadera

    {                              
      *(DWORD*)(0x01A1B9FC) = 16000; //04E50C5C
     }
   Sleep(200); //milisegundos de espera del bucle
  }

}

void Teclado() //nombre de la variable
{

  while (1) //bucle
  {
     if (GetAsyncKeyState(VkKeyScan('o')) & 1) //usar teclado para activar
     {
    nombre = !nombre; //lo contrario de verdadero De true a false o de false a true
    }
     Sleep(500);
  }
}

//DLL.MAINT

BOOL WINAPI DllMain(HINSTANCE module, DWORD reason, LPVOID reserved)
{
   if (reason == DLL_PROCESS_ATTACH)
    {
     CreateThread(0, 0, (LPTHREAD_START_ROUTINE)dll, 0, 0, 0);
    CreateThread(0, 0, (LPTHREAD_START_ROUTINE)Teclado, 0, 0, 0);
}
   else if (reason == DLL_PROCESS_ATTACH)
    {
   
     salir = true;
   }

    //devolver
   return true;

}


TrOnTxU

Sé que soy pesao, pero es que poneis preguntas sin nada de contexto, y hay que echarle un rato para averiguar a que os referis :(

De entrada, cosas que veo  *(DWORD*)(0x01A1B9FC) = 16000; //04E50C5C

Porque escribes en una direccion de de memoria hardcodeada?
Por lo que veo utilizas librerias de windows, y con todo lo de la memoria virtual y el espacio de memoria protegido (no estas en una plataforma embebida como era la NintendoDS, etc.)
Esa direccion la tendrias que obtener de algun sitio, no?

Luego veo que arrancas dos hilos, que parece que nunca terminan.

Y estas modificando un bool desde dos hilos (nombre), y ni siquiera lo has marcado con volatile!
El problema no es que pueda haber una race condition, pero al menos deberias de asegurarte q esa modificacion es atomica y marcada como volatile para que el compilador entienda que no se debe tocar eso al optimizar.

Y esta parte?:
if (reason == DLL_PROCESS_ATTACH)
    {
     CreateThread(0, 0, (LPTHREAD_START_ROUTINE)dll, 0, 0, 0);
    CreateThread(0, 0, (LPTHREAD_START_ROUTINE)Teclado, 0, 0, 0);
}
   else if (reason == DLL_PROCESS_ATTACH)
    {
   
     salir = true;
   }

Tienes un if y luego un else if con la misma condición?
No entiendo el proposito.

Si explicas un poco más que quieres hacer quizás pueda ayudarte un poco.

Salu2
Vicent: Linked-In  ***  ¡¡Ya tengo blog!!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.