appelez pile et désassemblage doute
-
06-07-2019 - |
Question
Trois doutes 1) Supposons que je reçois la pile d’appel comme ci-dessous
user32.dll!_InternalCallWinProc@20() + 0x28 bytes
user32.dll!_UserCallWinProcCheckWow@32() + 0xb7 bytes
user32.dll!_CallWindowProcAorW@24() + 0x51 bytes
user32.dll!_CallWindowProcW@20() + 0x1b bytes
Maintenant, quels sont les octets mentionnés à la fin de chaque fonction? Comme pour la première instruction, qu'est-ce que 0x28 octets?
2) Comment placer un point d'arrêt sur une dll système Windows sous VS? Dans windbg, je peux rechercher une fonction particulière de la DLL système Windows comme
>x wininet!*funcA*
Avec cette commande, je peux obtenir l'adresse de cette fonction et mettre un point d'arrêt. Puis-je faire la même chose dans Visual Studio?
3) Je n'ai pas le fichier Symbol d'une DLL. La pile d'appels que je reçois lors du désassemblage est
7814XXX0 call dword ptr [__imp__WindowsFuncA@32 (781EXXXXh)]
Qu'est-ce que __ imp __
dans la pile d'appels ci-dessus? Est-ce que cela signifie que cette fonction Windows est reliée à une autre DLL?
La solution
1) Il s'agit du décalage d'octet de l'instruction en cours d'exécution dans ce cadre de pile, par rapport au début de la fonction.
2) Saisissez un élément similaire à celui-ci dans la boîte de dialogue Nouveau point d'arrêt:
{,,user32.dll}_SendMessageW@16
où 16
correspond au nombre d'octets de paramètres attendus par la fonction (sous Win32, il s'agit presque toujours de 4 fois le nombre de paramètres). Le W
fait référence à la version Unicode de l'API; utilisez A
si vous déboguez une application ANSI.
3) __ imp __
fait référence à la table d'importation DLL - le code du module actuel est redirigé via un JMP
dans la DLL Windows réelle. et le symbole __ imp __
fait référence à ce JMP
. Ces JMP
résident dans une table de la DLL ou du fichier EXE effectuant l'appel.
Autres conseils
Pour la première partie de votre question, les décalages d'octets mentionnés sont la position dans la fonction en cours d'exécution qui a entraîné l'appel ultérieur plus haut dans la pile.
1) Ce sont les décalages du début de la fonction à la ligne en cours d'exécution lors de la création de la trace de pile.
2 & amp; 3 - ne sais pas. Désolé.