J'ai hérité du code qui fonctionnait sous Windows 2000 en utilisant un petit morceau de code d'assemblage pour localiser l'adresse de base de la pile, puis il utilisait un décalage pour saisir la valeur du paramètre passé à la fonction de démarrage du thread.Recherche de paramètres de début de threads en haut de la pile
Toutefois, cela ne fonctionne pas dans Windows 2008 Server. Le décalage est évidemment différent. Après l'expérimentation, j'ai modifié le code pour rechercher la pile jusqu'à ce qu'elle trouve la première valeur non NULL. pirater
DWORD* pStack = pStackBase;
do
{
pStack--;
}
while (*pStack == NULL);
// Read the parameter off the stack
g_dwCtrlRoutineAddr = *pStack;
Ses œuvres! Mais je veux une solution 'correcte'.
Est-ce que quelqu'un connaît une solution plus sûre/meilleure pour obtenir le paramètre passé à la fonction de démarrage d'un thread sur Windows 2008 Server?
La fonction de démarrage de fil est ntdll! _RtlUserThreadStart
Et le premier paramètre que j'essaie de localiser l'adresse de la kernel32 fonction! CtrlRoutine
Votre question réelle est « comment obtenir l'adresse de kernel32.CtrlRoutine » – Abyx