8
votes

Comment récupérer l'adresse de départ d'un fil dans Windows?

Je travaille sur un explorateur de processus mini-Windows en C, j'ai une poignée à un fil.
Comment puis-je récupérer l'adresse de départ de ce fil? Quelque chose comme ça:
Entrez la description de l'image ici


0 commentaires

3 Réponses :


1
votes

Vous devriez pouvoir obtenir une trace de pile avec stackwalk64 ou une fonction associée, puis analyser avec le dbghelp.dll.

Cet article de codeProject explique tout en détail: http://www.codeproject.com/kb/threads/stackwalker.aspx


0 commentaires

4
votes

ntqueryinformationthread avec threadQuiserysewin32startadddress . Une autre possibilité est de marcher sur la pile du fil avec stackwalk64 .

Si vous n'avez besoin que de l'adresse de démarrage, ntqueryinformationprocess est un lot plus simple. Même avec un codage assez terres, la pile prend quelques centaines de lignes de code ou ainsi.


0 commentaires

7
votes

Une telle question a déjà été posée il y a quelques jours. Voici une solution d'exemple: xxx

source: http://forum.sysinternals.com/how-to-get-the-start-address-and-modu_topic5127_post18072.html#18072

Vous devrez peut-être inclure ce fichier: http://pastebin.com/eeeqr0el

Question connexe: Comment ajouter NTDLL.DLL aux bibliothèques de projet avec des fonctions LoadLibrary () et GetProcAddress ()?


6 commentaires

Merci, mais cette fonction reviendra un nombre. Comment puis-je l'utiliser comme adresse de début?


Cette fonction renvoie l'adresse de départ d'un fil de thread dans l'espace d'adressage de processus cible. Vous l'utilisez de quelque manière que vous ne voulez que (par exemple, si vous connaissez la définition de la fonction, vous pouvez la jeter et appeler à l'aide de CreaterEmoteTetHread Fonction).


Puis-je récupérer quelque chose comme ceci: chrome.dll! Chromemain + 0x11d en utilisant ce numéro?


Je pense que vous devez vérifier quel module votre adresse de démarrage est située (il n'est pas nécessaire d'être dans le segment de fichier .Text du fichier EXE, par exemple, par exemple ntdll.dll ou chrome.dll ), obtenez le imagebaseAddress du code, puis calculez la partie décalée (+ 0x1111111D). Les noms de fonction peuvent être récupérés en analysant directement les fichiers DLL ( MSDN.MicRosoft.com/ EN-US / Bibliothèque / MS809762.aspx Voir la section Exportations de fichiers PE). Heureux piratage!


C'est l'adresse du premier octet de la fonction dans le processus cible. Vous devez vous rappeler que cela peut être lancé sur un pointeur de fonction, mais le code est situé dans l'espace d'adressage de processus cible.


Ce mot pour x86 et x64?