J'ai donc une application qui démarre une autre application avec ma DLL injectée (avec Detours). Le point d'entrée est DllMain. Je ne peux pas faire grand chose de DllMain, et ne peux certainement pas faire de boucle. Alors, comment puis-je appeler mes fonctions de moniteur DLL toutes les x secondes? J'ai lu que vous ne pouvez pas créer un thread à partir de DllMain (au moins jusqu'à ce qu'il revienne) et c'est vrai parce que cela m'a écrasé. J'ai donc essayé de le créer dans l'événement attach thread et il m'a planté. Alors maintenant, ce que j'essaie de faire est de l'injecter à nouveau (Incase Detours échoue) afin que je puisse gérer le module. Ensuite, je reçois l'adresse d'une fonction d'initialisation qui crée mon thread. Je reçois très bien le module, mais je ne pense pas pouvoir obtenir l'adresse de la fonction. J'ai rendu la fonction vide, et elle m'a encore écrasé. Donc, il ne va même pas jusqu'à appeler la fonction. Visual Studio a déclaré que je n'avais aucun accès en lecture.Où DLL interne à la boucle d'injection?
Alors qu'est-ce que je suis supposé faire? Que faites-vous pour boucler vos fonctions DLL lorsque vous ne possédez pas le programme joint (exe).
//Application.exe
STARTUPINFO si = {sizeof(STARTUPINFO)};
PROCESS_INFORMATION pi = {0};
DetourCreateProcessWithDll(filename, NULL, NULL, NULL, TRUE,
CREATE_DEFAULT_ERROR_MODE | CREATE_SUSPENDED, NULL, path,
&si, &pi, detoured, hook, NULL);
processID = pi.dwProcessId;
hDll = InjectDLL(processID, hook);
if(hDll != NULL)
{
STARTER Starter = (STARTER)GetProcAddress(hDll, "Starter");
if(Starter != NULL)
Starter();
}
ResumeThread(pi.hThread);
La fonction de démarrage est exporté et C extern semble bien inspecté (il est ordinale 1).
Je n'ai aucune idée de ce qui pourrait éventuellement se tromper, et j'espère simplement que quelqu'un là-bas a eu de l'expérience avec ce sujet et s'écraser.
Voici le code de la DLL:
//Hook.h
extern "C"
{
void __declspec(dllexport) Starter(void);
}
//Hook.cpp
void Starter(void)
{
}
Merci