2011-01-09 1 views
1


Supposons que j'ai une fonction appelée "Overflow" dans une DLL appelée "Overflow.dll" mais je n'ai pas ses PDB.
Je sais que je peux obtenir l'adresse avec "GetProcAddress", mais puis-je obtenir l'adresse où elle se termine ou sa taille?
(C++ dans Windows)Fonctions de symbolisation sans PDB

La raison pour laquelle je demande ceci est que j'ai une adresse et je veux savoir si elle est dans ma fonction spécifique. Je suppose (et s'il vous plaît me corriger si je me trompe) que l'adresse est dans ma fonction si:
StartAddress < = Adresse < = Mon EndAddress

merci :)

Répondre

0

Je suppose (et s'il vous plaît corrigez-moi si je me trompe)

Je suis "corriger". Le problème est qu'il est extrêmement improbable que votre fonction n'ait aucun appel de fonction à l'intérieur de lui-même. Par exemple, la position pourrait être à l'intérieur d'un appel printf appelé par votre fonction, mais le pointeur d'instruction ne serait pas dans votre fonction elle-même.

Vous pouvez implémenter un analyseur pour les instructions x86 qui recherchent l'instruction de retour pour trouver l'adresse de fin, en supposant que vous savez qu'il n'y a qu'un seul retour dans la fonction. Si vous ne savez pas qu'il n'y a qu'un seul retour, alors vous avez besoin des PDB.

+0

C'est bon. Je marche aussi sur la pile, donc je peux juste regarder à travers un tas d'adresses. – Idov