2010-01-04 2 views
8

Ich habe mehrere hundert DLLs gehören zu einem großen Spagetti-Code-Projekt und müssen sehen, welche Anrufe exportieren oder importieren. Und es wäre auch großartig, wenn ich in der Lage wäre, ein Abhängigkeitsdiagramm zwischen DLLs zu erhalten. Kann mir jemand kostenlose und zuverlässige Dienstprogramme dafür empfehlen? Danke.Beste DLL-Symbole Dump-Dienstprogramm

Bearbeiten: Dependancy Walker scheint nicht genug zu sein: Ich brauche eine Liste nicht nur für requited DLLs, sondern auch um zu wissen, wofür diese DLLs sind.

Antwort

13

Dependency Walker (abhängig.exe) kann das tun und ist kostenlos. Es hat auch eine Profilfunktion, so dass Sie sehen können, welche DLLs dynamisch geladen werden.

depends.exe screenshot http://dependencywalker.com/snapshot.png

Wenn Ihre DLLs sind .NET-Assemblies Sie Reflector verwenden können, und wenn es sich um eine COM-DLL mit einer Typbibliothek ist, können Sie OleView verwenden, um weitere Informationen zu erhalten. Um mehr Informationen aus einer normalen DLL herauszuholen, müssten Sie auf Disassembler und Lesemontage zurückgreifen.

+0

Vielen Dank. Es ist sehr nützlich, wenn jemand sehen muss, welche Module von einer bestimmten ausführbaren Datei aufgerufen werden. Aber ich muss ein umgekehrtes Problem lösen: Ich muss wissen, wofür diese DLLs sind. –

+0

Es zeigt auch die exportierten und importierten Funktionen aus anderen DLLs. Es gibt nicht viel mehr Informationen, die Sie von einer normalen DLL erhalten können. Und Sie können eine DLL statt einer EXE laden, wenn Sie möchten. –

-2

Es gibt keine Möglichkeit, Informationen darüber zu erhalten, welche DLLs verwendet werden. Sie müssen die Softwaredokumentation Ihres Projekts lesen - hoffen Sie, dass es welche gibt. Untersuche auch die Makefiles sorgfältig.

Sie können die Funktionsnamen verwenden, um zu sehen, Quellcode wird in welche DLLs und zugeordnet Um dies zu erhalten, sollten Sie das "Dumpbin" -Tool verwenden, das mit MSVC kommt. "Dependancy Walker" ist nur ein Frontend für dieses Tool.

Schreiben Sie dann ein paar Skripte und/oder verwenden Sie grep, um die Ausgabe zu filtern, um den Inhalt der DLL zu analysieren.

Sie können SO für andere Reverse Engineering-Techniken suchen. Ich glaube, dass Sie eine Menge Informationen finden werden, weil es eine allgemeine Fähigkeit für Programmierer ist.

+0

Dependency Walker hat auch Runtime-Analyse-Funktionalität, die nicht nur die statisch geladenen DLLs zeigt, sondern auch die dynamisch geladenen DLLs, alle Ausnahmen und Pfade von wo aus sie untersucht und geladen werden. Das kann nützlich sein und ist nicht etwas, was Dumpbin tut. Procmon konnte das aber tun. –

+0

Ja, aber das wird dir immer nur einen Schnappschuss geben. Jeder, der nur ein bisschen Ingenieurskunst und Qualitätsbewusstsein hat, wird Ihnen sagen, dass es sehr gefährlich ist, sich darauf zu verlassen. Andere sammeln dann ein erstes Verständnis des Systems. – Lothar