2009-12-16 4 views

Répondre

5

À moins que les fonctions exportées ne ressemblent à une DLL COM ou C++ avec fusion, l'information n'est tout simplement pas là pour fournir les arguments. Il est normalement possible de trouver la taille totale des arguments, et il y a une chance assez décente que diviser par 4 donnera quelque chose de proche du bon nombre, mais au-delà c'est le travail manuel, lire le code assembleur pour comprendre comment les arguments sont utilisé. S'il s'agit d'une DLL COM, elle peut inclure une bibliothèque de types qui indique à tous sur le contenu de la DLL et comment l'utiliser. Dans ce cas, il y aura généralement seulement très peu de fonctions exportées à regarder - vous devrez utiliser COM pour obtenir la fonctionnalité réelle.

S'ils sont munis de noms C++, cela dépendra du compilateur/jeu d'outils utilisé pour créer la DLL. Par exemple, s'il a été créé avec VC++, vous pouvez utiliser UnDecorateSymbolName() pour obtenir le nom complet et les arguments.

0

Pour les fonctions C++, vous pouvez voir les arguments (et quelques autres propriétés), et peut de Depends-essoreuse dem). Pour C, pas de chance (la liaison C est non typée).

1

Je propose cette façon (avec le studio vissual 2008 et fenêtres):

  1. ouvrir un cmd
  2. aller à

    c: \ ... "mvs9.0" \ vc \ bin

  3. exec

    dumpbin "nameOfDll" .dll/exportations/out c: \ dumpbin.txt

  4. dumpbin.txt ouvert

ressemble à ceci

ordinal hint RVA  name 

     1 0 00001070 [email protected]@[email protected] 
     2 1 000011A0 ??1CMpeg[email protected]@[email protected] 
     3 2 00001000 [email protected]@[email protected]@@Z 
     4 3 00001130 [email protected]@@QAEHXZ 
     5 4 00001100 [email protected]@@[email protected] 
     6 5 00001150 [email protected]@@QAEHXZ 
     7 6 00001160 [email protected]@@QAEPAEXZ 
     8 7 00001140 [email protected]@@QAEHXZ 
     9 8 000010E0 [email protected]@@[email protected] 
    10 9 00001120 [email protected]@@QAEHXZ 

  1. exec

    undname ?? 0CMpeg4Dec @@ QAE @ XZ

la sortie est

Microsoft (R) C++ Name Undecorator 
Copyright (C) Microsoft Corporation. All rights reserved. 

Undecoration of :- "[email protected]@[email protected]" is :- "public: __thiscall CMpeg4Dec::CMpeg4Dec(void)" 
Questions connexes