Quelqu'un peut-il m'expliquer comment connaître la convention d'appel d'une DLL sans obtenir et traiter les noms de méthodes? Disons que notre application charge une DLL tierce et pour la gérer, y a-t-il des moyens efficaces de connaître la convention d'appel d'une DLL? (__stdcall, __cdecl, __fastcall)Comment trouver la convention d'appel d'une DLL tierce?
Répondre
Si le symbole commence par _
mais n'a pas @
, alors il s'agit de __cdecl
. Si cela commence par _
et a @
c'est __stdcall
. Si cela commence par @
et a un autre @
, c'est __fastcall
.
Tout en essayant de comprendre pourquoi je recevais des symboles non résolus lors de la liaison d'un dll tiers je suis tombé sur une solution programmatique (en quelque sorte).
j'ai écrit un petit programme contre l'API Windows en utilisant UnDecorateSymbolName
de Dbghelp.h
pour décoder le système de mutiler:
#include "Windows.h"
#include "Dbghelp.h"
#include "tchar.h"
int _tmain(int argc, _TCHAR* argv[])
{
CHAR out[512];
UnDecorateSymbolName(
// Mangled symbol
"[email protected]@[email protected]@[email protected]@XZ",
out,
// Length of symbol
46,
UNDNAME_32_BIT_DECODE);
}
Il existe des moyens certainement plus joli de le faire. Je l'ai juste exécuté dans un débogueur et regardé le contenu de dehors.
A noter également, contrairement à la réponse de Ignacio, la différence entre les noms déchiquetés pour les cdecl
méthodes dans le dll et les méthodes stdcall
étant recherché était YAAAV
contre YGAAV
.
- 1. Habillage d'une DLL tierce
- 2. Comment changer la langue d'une DLL tierce?
- 3. DLL tierce dans l'application Silverlight
- 4. Utilisation d'une DLL COM tierce dans ASP.NET
- 5. Comment tracer dans une DLL tierce avec Visual Studio?
- 6. Déboguer une erreur de convention d'appel de DLL incorrecte
- 7. utilisant une DLL tierce dans une application web d'entreprise?
- 8. Dépendance de la bibliothèque tierce WiX CustomAction
- 9. C++ - Lier à une DLL tierce - violation d'accès intermittent
- 10. Problème JNI: appeler en Java une DLL qui utilise une DLL tierce
- 11. Impossible de trouver DLL PInvoke 'sqlceme30.dll'
- 12. Comment trouver une DLL avec un CLSID?
- 13. Comment faire pour trouver DLL EntryPoint?
- 14. Où puis-je trouver la DLL System.Linq.Dynamic?
- 15. Comment trouver une installation COM dll à partir de la DLL Interop
- 16. Impossible de trouver MSCVR90.dll
- 17. Java: comment utiliser une bibliothèque tierce?
- 18. Envoi d'un courrier électronique à partir de MS Access Aucune DLL tierce autorisée
- 19. Où trouver DLL ou Documentation pour XtraExport?
- 20. Impossible de trouver TinyMCE .NET dll
- 21. Déploiement d'une application Java compilée avec Netbeans - Impossible de trouver une classe tierce
- 22. Poignée/convention bar Grip
- 23. C# EntryPointNotFoundException Impossible de trouver un point d'entrée nommé 'SetDllDirectory' dans la DLL 'kernel32.dll'
- 24. Comment résoudre l'exception .NET CF "Impossible de trouver PInvoke DLL"?
- 25. convention chaîne
- 26. NPOI dll (tierce partie excel writer dll) .... System.Security.SecurityException: Cet assemblage ne permet pas aux appelants partiellement de confiance
- 27. Comment trouver les fonctions API des fichiers DLL?
- 28. Enum Naming Convention - Pluriel
- 29. Comment lire les variables de l'application tierce depuis la mémoire?
- 30. Comment encapsuler la vue d'une application Django tierce
Merci beaucoup Ignacio Vazquez-Abrams. Y a-t-il un autre moyen efficace de le découvrir? Y at-il des fonctions de bibliothèque pour obtenir la convention d'appel? – RoboAlex
Cela suppose bien sûr que la DLL est compilée par MSVC, comme le dit l'article lié dans l'introduction. Il suppose également qu'il n'y a pas de fichier DEF utilisé. Essayez simplement de trouver la convention d'appel utilisée par USER32.DLL par cette méthode - ne fonctionne pas. – MSalters