Ildasm.exe (Dezasembler IL)

Dezasembler IL jest narzędziem towarzyszącym asemblerowi IL (Ilasm.exe). Ildasm.exe pobiera przenośny plik wykonywalny (PE), który zawiera kod języka pośredniego (IL) i tworzy plik tekstowy odpowiedni do Ilasm.exe.

To narzędzie jest instalowane automatycznie z programem Visual Studio. Aby uruchomić to narzędzie, użyj wiersza polecenia dla deweloperów programu Visual Studio lub programu Visual Studio Developer PowerShell.

W wierszu polecenia wpisz następujące polecenie:

Składnia

ildasm [options] [PEfilename] [options]

Parametry

Następujące opcje są dostępne dla plików.exe, .dll, .obj, .lib i .winmd .

Opcja Opis
/out=filename Tworzy plik wyjściowy z określonym filenameelementem , zamiast wyświetlać wyniki w graficznym interfejsie użytkownika.
/rtf Generuje wyjście w formacie RTF. Nieprawidłowy z opcją /text .
/text Wyświetla wyniki w oknie konsoli, a nie w graficznym interfejsie użytkownika czy plik wyjściowy.
/html Generuje wyjście w formacie HTML. Prawidłowy tylko z /output opcji.
/? Wyświetla składnię polecenia i opcje narzędzia.

Następujące dodatkowe opcje są dostępne dla plików.exe, .dlli .winmd .

Opcja Opis
/bytes Pokazuje rzeczywiste bajty w formacie szesnastkowym, jak mówi instrukcja.
/caverbal Generuje obiekty typu blob niestandardowych atrybutów w formie słownej. Domyślnie jest to forma binarna.
/linenum Dołącza odwołania do oryginalnych wierszy źródłowych.
/nobar Pomija wyskakujące okienko ze wskaźnikiem postępu dezasemblera.
/noca Pomija wyjście niestandardowych atrybutów.
/project Wyświetla metadane w sposób, w jaki wydaje się być zarządzanym kodem, zamiast sposobu wyświetlania go w natywnej środowisko wykonawcze systemu Windows. Jeśli PEfilename nie jest to plik metadanych systemu Windows (winmd), ta opcja nie ma wpływu. Zobacz .NET Framework Support for Windows Store Apps and środowisko wykonawcze systemu Windows (Obsługa aplikacji ze Sklepu Windows i środowisko wykonawcze systemu Windows).
/pubonly Dezasembluje tylko typy publiczne i elementy członkowskie. Odpowiednik /visibility:PUB.
/quoteallnames Umieszcza wszystkie nazwy w pojedynczym cudzysłowie.
/raweh Wyświetla klauzule obsługi błędów w pierwotnej formie.
/source Wyświetla wiersze z oryginalnego źródła jako komentarze.
/tokeny Wyświetla tokeny metadanych klas i składowych.
/widoczność:vis [+vis...] Dezasembluje tylko typy lub elementy członkowskie o określonej widoczności. Poniżej przedstawiono prawidłowe wartości dla elementu vis:

PUB — publiczny

PRI — prywatne

FAM — rodzina

ASM — zestaw

FAA — rodzina i zestaw

FOA — rodzina lub zestaw

PSC — zakres prywatny

Aby uzyskać definicje tych modyfikatorów widoczności, zobacz MethodAttributes i TypeAttributes.

Następujące opcje są prawidłowe dla plików.exe, .dlli .winmd tylko dla plików wyjściowych pliku lub konsoli.

Opcja Opis
/all Określa kombinację opcji /header, /bytes, /stats, /classlist i /tokens .
/classlist Dołącza listę klas zdefiniowanych w module.
/forward Używa deklaracji przekazującej klasy.
/headers Dołącza informacje nagłówka pliku do wyjścia.
/item:class [::member [(sig]] W zależności od określonego argumentu dezasembluje następujące obiekty:

- Dezasembluje określony classelement .
- Dezasembluje określony member element class.
- Dezasembluje member element z class określonym podpisem sig. Format to sig :
[instance] returnType(parameterType1, parameterType2, …, parameterTypeN)
Uwaga W .NET Framework w wersjach 1.0 i 1.1 sig należy wykonać nawias zamykający: (sig). Począwszy od programu Net Framework 2.0 nawias zamykający musi zostać pominięty: (sig.
/noil Wyłącza wyjście kodu zestawu IL.
/stats Zawiera dane statystyczne dotyczące obrazu.
/typelist Generuje pełną listę typów, aby zachować kolejność typów w rundzie.
/unicode Używa kodowania Unicode danych wyjściowych.
/utf8 Używa kodowania UTF-8 danych wyjściowych. Domyślne jest ANSI.

Następujące opcje są prawidłowe dla plików.exe, .dll, .obj, .lib i .winmd tylko dla plików wyjściowych pliku lub konsoli.

Opcja Opis
/metadata[=specifier] Pokazuje metadane, gdzie specifier to:

MDHEADER — pokazuje informacje i rozmiary nagłówka metadanych.

HEX — wyświetla informacje w szesnastce, a także wyrazy.

CSV — pokaż liczby rekordów i rozmiary sterty.

UNREX — pokaż nierozwiązane zewnętrzne.

SCHEMA — umożliwia wyświetlenie informacji o nagłówku metadanych i schemacie.

RAW — pokaż nieprzetworzone tabele metadanych.

HEAPS — pokaż surowe stery.

VALIDATE — zweryfikuj spójność metadanych.

Można określić /metadata wiele razy, z różnymi wartościami dla specifier.

Następujące opcje są prawidłowe tylko dla plików lib dla plików lub danych wyjściowych konsoli.

Opcja Opis
/objectfile=filename Wyświetla metadane pojedynczego pliku obiektu w określonej bibliotece.

Uwaga

Wszystkie opcje dlaIldasm.exe są bez uwzględniania wielkości liter i rozpoznawane przez pierwsze trzy litery. Na przykład /quo jest równoważne /quoteallnames. Opcje, które określają argumenty, akceptują dwukropek (:) lub znak równości (=) jako separator między opcją a argumentem. Na przykład /output:nazwa_pliku jest odpowiednikiem /output=nazwa_pliku.

Uwagi

Ildasm.exe działa tylko na plikach PE na dysku. Nie wykonuje operacji na plikach zainstalowanych w globalnej pamięci podręcznej zestawów.

Plik tekstowy utworzony przez Ildasm.exe może służyć jako dane wejściowe do asemblera IL (Ilasm.exe). Jest to przydatne na przykład podczas kompilowania kodu w języku programowania, który nie obsługuje wszystkich atrybutów metadanych środowiska uruchomieniowego. Po skompilowaniu kodu i uruchomieniu jego danych wyjściowych za pośrednictwem Ildasm.exewynikowy plik tekstowy IL można ręcznie edytować, aby dodać brakujące atrybuty. Następnie można przetworzyć ten plik tekstowym Asemblerem IL, aby wygenerować ostateczny plik wykonywalny.

Uwaga

Obecnie nie można używać tej techniki w połączeniu z plikami PE zawierającymi osadzony kod natywny (na przykład pliki PE generowane przez program Visual C++).

Można użyć domyślnego graficznego interfejsu użytkownika dezasemblera IL, aby wyświetlić metadane i zdezasemblowany kod jakiegokolwiek istniejącego pliku PE w hierarchicznym widoku drzewa. Aby użyć graficznego interfejsu użytkownika, wpisz ildasm w wierszu polecenia bez podawania argumentu PEfilename lub żadnych opcji. W menu Plik możesz przejść do pliku PE, który chcesz załadować do Ildasm.exe. Aby zapisać metadane i zdezasemblowany kod wyświetlany dla wybranego pe, wybierz polecenie Zrzut z menu Plik . Aby zapisać tylko widok drzewa hierarchicznego, wybierz polecenie Dump Treeview z menu Plik . Aby uzyskać szczegółowy przewodnik dotyczący ładowania pliku do Ildasm.exe i interpretowania danych wyjściowych, zobacz samouczekIldasm.exe znajdujący się w folderze Samples dostarczanym z zestawem Windows SDK.

Jeśli podasz Ildasm.exe z argumentem PEfilename zawierającym osadzone zasoby, narzędzie generuje wiele plików wyjściowych: plik tekstowy zawierający kod IL i dla każdego osadzonego zasobu zarządzanego plik resources utworzony przy użyciu nazwy zasobu z metadanych. Jeśli zasób niezarządzany jest osadzony w PEfilename, plik res jest generowany przy użyciu nazwy pliku określonego dla danych wyjściowych IL przez / output opcji.

Uwaga

Ildasm.exe pokazuje tylko opisy metadanych dla plików wejściowych .obj i .lib . Kod IL dla tych typów plików nie jest dezasemblowany.

Możesz uruchomić Ildasm.exe za pośrednictwem pliku an.exe lub .dll , aby określić, czy plik jest zarządzany. Jeśli plik nie jest zarządzany, narzędzie wyświetli komunikat informujący, że plik nie ma prawidłowego nagłówka środowiska uruchomieniowego języka wspólnego i nie może zostać zdezasemblowany. Jeśli plik jest zarządzany, narzędzie zostanie uruchomione pomyślnie.

Informacje o wersji

Począwszy od .NET Framework 4.5, Ildasm.exe obsługuje nierozpoznany obiekt BLOB marshal (binarny duży obiekt), wyświetlając nieprzetworzonej zawartości binarnej. Na przykład, poniższy kod przedstawia sposób wyświetlania skierowanego obiektu typu BLOB, wygenerowanego przez program C#.

public void Test([MarshalAs((short)70)] int test) { }
// IL from Ildasm.exe output
.method public hidebysig instance void Test(int32  marshal({ 46 }) test) cil managed

Począwszy od .NET Framework 4.5, Ildasm.exe wyświetla atrybuty, które są stosowane do implementacji interfejsu, jak pokazano w poniższym fragcie z Ildasm.exe danych wyjściowych:

.class public auto ansi beforefieldinit MyClass
  extends [mscorlib]System.Object
  implements IMyInterface
  {
    .interfaceimpl type IMyInterface
    .custom instance void
      [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 )
      …

Przykłady

Następujące polecenie powoduje, że metadane i zdezasemblowany kod pliku MyHello.exe PE są wyświetlane w domyślnym graficznym interfejsie użytkownika Ildasm.exe .

ildasm myHello.exe

Następujące polecenie dezasembluje plik MyFile.exe i zapisuje wynikowy tekst asemblera IL w pliku MyFile.il.

ildasm MyFile.exe /output:MyFile.il

Następujące polecenie dezasembluje plik MyFile.exe i wyświetla wynikowy tekst asemblera IL w oknie konsoli.

ildasm MyFile.exe /text

Jeśli plik MyApp.exe zawiera osadzone zasoby zarządzane i niezarządzane, następujące polecenie generuje cztery pliki: MyApp.il, MyApp.res, Icons.resources i Message.resources:

ildasm MyApp.exe /output:MyApp.il

Następujące polecenie dezasembluje metodę MyMethod w klasie MyClass w MyFile.exe programie i wyświetla dane wyjściowe w oknie konsoli.

ildasm /item:MyClass::MyMethod MyFile.exe /text

W poprzednim przykładzie może istnieć kilka metod o nazwie MyMethod z różnymi podpisami. Następujące polecenie dezasembluje metodę MyMethod wystąpienia z zwracany typ void i typy parametrów int32 i ciąg.

ildasm /item:"MyClass::MyMethod(instance void(int32,string)" MyFile.exe /text

Uwaga

W .NET Framework w wersjach 1.0 i 1.1 lewe nawiasy, które są zgodne z nazwą metody, muszą być wyważone przez prawy nawias po podpisie: MyMethod(instance void(int32)). Począwszy od .NET Framework 2.0 nawias zamykający musi zostać pominięty: MyMethod(instance void(int32).

Aby pobrać metodę static (Shared metoda w Visual Basic), pomiń słowo kluczowe instance. Typy klas, które nie są typami pierwotnymi, takie jak int32 i string muszą zawierać przestrzeń nazw i muszą być poprzedzone słowem kluczowym class. Typy zewnętrzne muszą być poprzedzone nazwą biblioteki umieszczoną w nawiasach kwadratowych. Następujące polecenie dezasembluje metodę statyczną o nazwie MyMethod , która ma jeden parametr typu AppDomain i ma zwracany AppDomaintyp .

ildasm /item:"MyClass::MyMethod(class [mscorlib]System.AppDomain(class [mscorlib]System.AppDomain)" MyFile.exe /text

Typ zagnieżdżony musi być poprzedzony klasą zawierającą i oddzielony od niej ukośnikiem. Jeśli na przykład MyNamespace.MyClass klasa zawiera klasę zagnieżdżonych o nazwie NestedClass, zagnieżdżona klasa jest identyfikowana w następujący sposób: class MyNamespace.MyClass/NestedClass.

Zobacz też