2010-05-23 12 views
9

Ich muss einfache Win32 DLL/Exe analysieren und alle Importe und Exporte von es zu zeigen, auf der Konsole oder GUI (d. H. Win Forms). Ist es möglich, Win32 DLL/Exe in C# .NET zu analysieren, indem Sie seine Export/Import-Tabellen lesen und verwaltete Typen daraus erhalten? Da .NET nicht verwaltete PE ist, können Sie nicht verwaltete PE-Dateien nicht in verwaltete .NET-Assemblys konvertieren. Es generiert nur COM-verwaltete Assemblys.Parsing einfache Win32 PE-Datei (Exe/DLL) in .NET

Wie kann ich diese Tabellen analysieren und alle Methoden (Signaturen) in verwaltetem Format übernehmen. (z.B. wenn char * als Argument, sollte es als IntPtr angezeigt werden).

+0

Usman, es gibt nicht so denken, wie "C# .NET". –

+0

Warum ist dieses Community-Wiki? –

+0

@John: C# gehört zu .NET ..? Ich habe etwas Merkwürdiges gesagt ..? – Usman

Antwort

2

Das Parsen von PE-Dateien ist mit Microsoft Portable Executable Specification Document möglich. Wie jedoch Logan bemerkte, sind die Signaturen nicht in der PE-Datei enthalten; nur die Namen der exportierten Funktionen sind enthalten.

UPDATE: Wenn Ihre DLL ist eine C++ DLL durch eine aktuelle Version von Microsofts C++ Compiler erstellt, dann können Sie den verstümmelten Namen undecorate die meisten der Unterschrift zu bekommen, indem Sie diese Funktion aufrufen: UnDecorateSymbolName von Debugging Tools for Windows. Der Rückgabewert ist jedoch nicht in dem verfälschten Namen enthalten.

+0

Namen sind dekoriert. Wenn Sie sie nicht verzieren, erhalten Sie exakte Signaturen (abgesehen von Parameternamen, nur Typen). Auf diese Weise haben Sie fast 90% der Signatur. – Usman

+0

Die überwiegende Mehrheit der Windows-DLLs verfügt über C-Style-Schnittstellen und nicht gemanagte Namen ohne Parameterinformationen. Wenn Sie bestimmte Dlls im Sinn haben, dann können Sie, wie ich schon sagte, diese mit Dumpbin überprüfen. –

+0

Siehe aktualisierte Antwort zum Entkorken von verstümmelten C++ - Namen. –

2

In Bezug auf den zweiten Teil Ihrer Frage, die Methodensignaturen erhalten, ist dies in der Regel unmöglich. Diese Information wird normalerweise nicht in der PE selbst gespeichert. Für C++ - Funktionen kann dies möglich sein, weil der verfälschte Name diese Information kodiert, aber viele DLLs stellen keine C++ - Schnittstellen bereit. Bei COM-Schnittstellen werden diese Informationen in einer Typbibliothek gespeichert, die häufig als Ressource im PE eingebettet ist. Um zu sehen, ob dies für die spezifischen DLLs möglich ist, die Sie im Sinn haben, können Sie dumpbin und undec verwenden, um zu sehen, ob die Funktionen C++ - gemangelte Namen sind. Wenn nicht, benötigen Sie eine andere Quelle von Informationen wie Header-Dateien, um die richtigen P/Invoke-Signaturen zu erstellen (in diesem Fall müssen Sie die PE-Datei wahrscheinlich nicht analysieren).