M5i9k
Messages postés49Date d'inscriptionmardi 22 novembre 2005StatutMembreDernière intervention10 novembre 2007
-
6 août 2006 à 21:40
MuPuF
Messages postés536Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention22 août 2008
-
7 août 2006 à 21:25
Bonjour,
j'ai écrit un programme qui permet de charger une dll dans un processus, mais le programme fonctionne seulement en DEBUG, en RELEASE, j'ai un problème avec CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0), est-ce que cette fonction de marche qu'en debug?
// Obtient l'adresse de la fonction LoadLibrary
hKernel = GetModuleHandle("kernel32.dll");
pMem = GetProcAddress((HMODULE)hKernel, "LoadLibraryA");
if(!pMem)
{
CloseHandle(hProc);
return FALSE;
}
// Crée un espace pour stocker l'emplacement de la dll dans le processus distant
hAddress = VirtualAllocEx(hProc, NULL, strlen(dllPath), MEM_COMMIT, PAGE_READWRITE);
if(!hAddress)
{
CloseHandle(hProc);
return FALSE;
}
// Copie le chemin de la dll
WriteProcessMemory(hProc, hAddress, dllPath, strlen(dllPath), NULL);
// Lance un thread pour charger la dll
hThread = CreateRemoteThread(hProc, NULL, NULL, (LPTHREAD_START_ROUTINE)pMem, hAddress, NULL, NULL);
if(!hThread)
{
VirtualFreeEx(hProc, hAddress, NULL, MEM_RELEASE);
CloseHandle(hProc);
return FALSE;
}
MuPuF
Messages postés536Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention22 août 2008 7 août 2006 à 21:25
Le debug est seulement utile pour le debug en effet lol . Dans vc 2003 meme en release il y a des infos de debug lol, tu peux voir des variables (a condition que ton prog soit pas trop évolué dans le c++).
Enfin bon, faudrait voir si on grossis pas l'exe avec ce genre de code (et si on peux pas grater des cycles en les enlevant totalement).
Si ça se trouve en fait, en mode release, il ne connait que les adresses mémoires statiques (données à la compilation) donc forcement il peut y accéder une fois le programme lancé, mais faire du pas à pas, c'est chaud quand meme, ils ont dus trouver la technique ...