Il est connu que le fichier * .lib de la bibliothèque Visual Studio est une archive Unix "ar" contenant des modules objet au format COFF. Mais j'ai trouvé que les bibliothèques pour l'importation de DLL sont une archive de petits morceaux (ou stubs) qui ne sont pas des objets COFF. Un exemple est la bibliothèque VS15 \ lib \ ucrt \ ucrt.lib. Ces blocs contiennent le nom de la fonction et la référence à la bibliothèque DLL qui définit cette fonction. Voici un exemple (vidage hexadécimal) de talon pour « puts » fonction:Format de la bibliothèque d'importation Microsoft Visual Studio
00-00-FF-FF-00-00-4C-01-39-E9-80-55-26-00-00-00 ......L.9..U&...
93-00-08-00-5F-70-75-74-73-00-61-70-69-2D-6D-73 “..._puts.api-ms
2D-77-69-6E-2D-63-72-74-2D-73-74-64-69-6F-2D-6C -win-crt-stdio-l
31-2D-31-2D-30-2E-64-6C-6C-00 1-1-0.dll.
Il est certainement pas l'objet COFF (bien qu'il contient 386 signature spécifique à l'architecture 0x14C COFF). Je ne trouve aucune documentation sur le format de ces objets d'importation. Quelqu'un connaît-il ce format?
Peut être des spécifications non-officielles?
Peut-être un code source pouvant traiter ce format?
Est-ce que cela aide: https://blogs.msdn.microsoft.com/ronpih/2006/10/28/new-version-of-the- microsoft-pecoff-spec /? –
Je connais bien cette documentation, c'est mon manuel. Hélas, il ne décrit que les modules objets COFF traditionnels, mais pas les stubs d'importation. –
Notez que les bibliothèques d'importation ucrt sont encore plus spéciales que les bibliothèques d'importation normales: elles peuvent contenir une logique spéciale pour charger des DLL spécifiques à la version. Voir par exemple https://mingwpy.github.io/ucrt.html pour la raison pour laquelle la simple génération d'une bibliothèque d'importation pour la DLL d'ucrt fait la mauvaise chose. – rubenvb