Hallo Martin,
die Sache ist eigentlich sehr einfach: .LIBs bestehen aus einem Library Header und einer einfachen Konkatenation von .obj-Modulen (in dem Format, wie sie z.B. mit -c aus dem Compiler kommen). Optional steht am Ende noch ein Symbolverzeichnis, das dem Linker erspart, alle enthaltenen Module sequentiell zu durchsuchen.
Eine Import-Library enthält eigentlich nur für jedes Codesymbol einen Sprung auf ein externes Symbol und die zusätzliche Angabe für den Linker, in welcher .DLL das Symbol zu finden ist. Der Stub besteht also meist nur aus einem einzelnen jmp-Maschinenbefehl. Man findet den, wenn man mit einem Assembler-Debugger maschinenbefehlsweise den Aufruf einer externen Funktion verfolgt. Die interne Struktur ist wie oben beschrieben.
Eine statische Bibiliothek enthält - statt der Stubs (Stümpfe) - vollständige .obj-Module, wie sie beim Compilieren einer .cpp-Datei entstehen.
Bibliotheken werden von Bibliotheksverwaltern aus .obj-Modulen erzeugt. Importbibliotheken werden meist mit speziellen Programmen erzeugt, die z.B. eine .DLL einlesen und die zugehörige Importbibliothek erzeugen; zuweilen werden sie aber auch vom Linker zusammen mit der .DLL produziert.
Das heißt insbesondere, man kann Teile seiner eigenen Programme, die sich nur selten ändern, oder die in mehreren Programmen identisch benötigt werden in eine Bibliothek packen und spart sich dann sowohl die Übersetzungszeiten, als auch eventuell lange Modullisten für den Linker.
Die Sache wird dadurch noch weiter vereinfacht und optimiert, daß der Linker sich aus jeder Bibliothek nur diejenigen Module herauspickt, die auch tatsächlich benötigt werden. Man muß sich also nicht überlegen, welche Teile einer Bibliothek tatsächlich benötigt werden.
Das .obj-Format selbst enthält unübersehbar noch die alten Segmentierungsmechanismen aus der Zeit der 16-Bit-Segmente, nach und nach aufgebohrt für die die moderneren Hardware-Anforderungen - alte Zöpfe, die die Sache für jemanden, der damit nicht vertraut ist, ziemlich unübersichtlich machen und ungeahnte Fehlermöglichkeiten bergen. (Zum Glück muß sich ein normaler Entwickler mit sowas nie befassen.)
Ansonsten ist es einfach eine Konkatenation von einzelnen Records, die verschiedene Arten von Information enthalten. Man kann die Teile zerlegen (dazu gibt es Programme) und untersuchen.
Gruß,
Houyhnhnm