Comment voir le contenu de la bibliothèque Windows (* .lib)

181

J'ai un fichier binaire - bibliothèque statique Windows (* .lib).
Existe-t-il un moyen simple de trouver les noms des fonctions et leur interface à partir de cette bibliothèque?

Quelque chose de similaire à emfaret elfdumputilitaires (sur les systèmes Linux)?

Nick Borodulin
la source
1
Remarque: l'invite de commande spécifique à .NET est fournie avec les éditions de Visual Studio mais pas avec l'édition Express. De: social.msdn.microsoft.com/Forums/en-US/…
terminé

Réponses:

199

En supposant que vous parlez d'une bibliothèque statique, DUMPBIN /SYMBOLSaffiche les fonctions et les objets de données de la bibliothèque. Si vous parlez d'une bibliothèque d'importation ( .libutilisée pour désigner des symboles exportés à partir d'une DLL), alors vous voulez DUMPBIN /EXPORTS.

Notez que pour les fonctions liées à l'interface binaire "C", cela ne vous permettra toujours pas de renvoyer des valeurs, des paramètres ou une convention d'appel. Cette information n'est pas du tout encodée dans le .lib; il faut le savoir à l'avance (via des prototypes dans des fichiers d'en-tête par exemple) pour les appeler correctement.

Pour les fonctions liées à l'interface binaire C ++, la convention d'appel et les arguments sont encodés dans le nom exporté de la fonction (également appelé "mangling de nom"). DUMPBIN /SYMBOLSvous montrera à la fois le nom de la fonction "mutilée" ainsi que l'ensemble décodé de paramètres.

Tim Lesher
la source
6
Les / SYMBOLS et / EXPORTS ne fonctionnent pas de nos jours. Je dois utiliser / ALL avec un tube | more pour voir toutes les fonctions dans le fichier .lib.
user5280911
100

Ouvrez une console de commande visuelle (invite de commandes Visual Studio)

dumpbin /ARCHIVEMEMBERS openssl.x86.lib

ou

lib /LIST openssl.x86.lib

ou ouvrez-le simplement avec 7-zip :) c'est une archive AR

Tanguy
la source
19
Astuce cool avec 7-zip, il semble y avoir deux fichiers .txt, que signifient-ils?
Damian
21

Je voulais un outil comme ar t libfile.asous unix.
L'équivalent Windows est lib.exe /list libfile.lib.

lgwest
la source
4
Oui, lib affichera (uniquement) les fichiers obj; il n'affichera pas les fonctions et les données dans les fichiers obj.
user34660
14

"dumpbin -exports" fonctionne pour dll, mais peut parfois ne pas fonctionner pour lib. Pour lib, nous pouvons utiliser "dumpbin -linkermember" ou simplement "dumpbin -linkermember: 1".

Franc
la source
13

DUMPBIN / EXPORTS obtiendra la plupart de ces informations et frapper MSDN obtiendra le reste.

Obtenez l'un des packages Visual Studio; C ++

Jim
la source
3

1) Ouvrez une invite de commande développeur pour VS 2017 (ou quelle que soit la version que vous avez sur votre machine) (elle doit être située sous: menu Démarrer -> Tous les programmes -> Visual Studio 2017 (ou quelle que soit la version que vous avez sur votre machine) -> Visual Studio Tools -> Invite de commandes pour les développeurs pour VS 2017.

2) Entrez la commande suivante:

dumpbin /EXPORTS my_lib_name.lib

user3292568
la source
2

Comme cela peut être vu dans d'autres réponses, vous devrez ouvrir une invite de commande de développeur proposée dans votre version de Visual Studio pour avoir dumpbin.exedans votre chemin d'exécution. Sinon, vous pouvez définir manuellement les variables d'environnement nécessaires.

dumpbin /EXPORTS yourlibrary.libaffichera généralement juste une petite liste de symboles. Dans de nombreux cas, il n'affiche pas les fonctions exportées par la bibliothèque.

dumpbin /SYMBOLS /EXPORTS yourlibrary.libmontrera ces symboles, mais aussi une quantité incroyablement énorme d'autres symbos. Vous devez donc les filtrer, éventuellement avec un tube vers findstr(si vous voulez un outil MS-Windows), ou grep.

La recherche du Staticmot - clé à l'aide de l'un de ces outils semble être un bon indice.

Hilton Fernandes
la source