Ildasm.exe (Dezasembler IL)

Dekompeler IL jest narzędziem towarzyszącym asebracie 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 jako dane wejściowe dlaIlasm.exe .

To narzędzie jest instalowane automatycznie z programem Visual Studio. Aby uruchomić narzędzie, użyj programu Visual Studio wiersz polecenia dla deweloperów lub 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 filename elementem , zamiast wyświetlać wyniki w graficznym interfejsie użytkownika.
/rtf Generuje wyjście w formacie RTF. Nieprawidłowy z /text opcji.
/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, .dll i 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 są wyświetlane w kodzie zarządzanym, a nie w sposób, w jaki są wyświetlane w natywnym Windows Runtime. Jeśli PEfilename plik metadanych Windows (winmd), ta opcja nie ma żadnego efektu. Zobacz .NET Framework dla aplikacji ze sklepu Windows Store i środowiska Windows Runtime.
/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.
/tokens Wyświetla tokeny metadanych klas i składowych.
/visibility: vis [+vis...] Dezasembluje tylko typy lub elementy członkowskie o określonej widoczności. Poniżej przedstawiono prawidłowe wartości dla vis :

PUB — publiczne

PRI — prywatne

FAM — rodzina

ASM — zestaw

FAA — rodzina i zestaw

FOA — rodzina lub zestaw

PSC — zakres prywatny

Definicje tych modyfikatorów widoczności można znaleźć w MethodAttributes tematach i TypeAttributes .

Poniższe opcje są prawidłowe dla plików .exe, .dll i winmd tylko dla plików lub konsoli danych wyjściowych.

Opcja Opis
/all Określa kombinację /header, /bytes, /stats, /classlist, i /tokens opcje.
/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:

- Dekompasuje określony class .
- Dekompasuje member określony przez class .
-Dekompasuje member z class określonym podpisem sig . Format pliku sig to:
[instance] returnType(parameterType1, parameterType2, …, parameterTypeN)
Uwaga W .NET Framework wersjach 1.0 i 1.1 musi nas nasunić sig się 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.

Poniższe opcje są prawidłowe dla plików .exe, .dll, obj, lib i winmd tylko dla danych wyjściowych pliku lub konsoli.

Opcja Opis
/metadata[= specifier ] Wyświetla metadane, gdzie specifier to:

MDHEADER — wyświetla informacje i rozmiary nagłówka metadanych.

HEX — wyświetla informacje w hex, a także w słowach.

CSV — wyświetla liczbę rekordów i rozmiary sterty.

UNREX — pokaż nierozwiązane zewnętrzne.

SCHEMA — wyświetla informacje o nagłówku metadanych i schemacie.

RAW — wyświetla nieprzetworzone tabele metadanych.

HEAPS — pokaż nieprzetworzone heapsy.

VALIDATE — zweryfikuj spójność metadanych.

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

Poniższe opcje są prawidłowe dla plików lib tylko dla danych wyjściowych pliku lub konsoli.

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

Uwaga

Wszystkie opcje Ildasm.exe są bez uwzględniania liter i rozpoznawane przez pierwsze trzy litery. Na przykład /quo jest odpowiednikiem /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 tekstowyIldasm.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średnictwemIldasm.exe wynikowy plik tekstowy IL można edytować ręcznie, 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 podaniem argumentu PEfilename ani żadnych opcji. W menu Plik możesz przejść do pliku PE, który chcesz załadować do Ildasm.exe. Aby zapisać metadane i zdezasembowany kod wyświetlany dla wybranego pe, wybierz zrzut polecenia z pliku menu. Aby zapisać tylko hierarchiczny widok drzewa, wybierz polecenie Zrzut Treeview z menu Plik. Szczegółowy przewodnik ładowania pliku do usługi Ildasm.exe i interpretowania danych wyjściowych znajduje się w samouczku usługi Ildasm.exe, który znajduje się w folderze Samples dostarczanym z zestawem Windows SDK.

Jeśli podanoIldasm.exez 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, który został wyprodukowany przy użyciu nazwy zasobu z metadanych. Jeśli zasób niezasób jest osadzony w pliku PEfilename, plik res jest wytwarzanych przy użyciu nazwy pliku określonej dla danych wyjściowych IL przez /output opcji.

Uwaga

Ildasm.exe 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ć program Ildasm.exe za pośrednictwem 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.exeobsługuje nierozpoznany marshal blob (duży obiekt binarny), wyświetlając nieprzetworzone dane binarne. 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, program Ildasm.exe atrybuty, które są stosowane do implementacji interfejsu, jak pokazano w poniższym fragmnie zIldasm.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 zdezasembowany kod dla pliku PE są wyświetlane wIldasm.exeMyHello.exe graficznym.

ildasm myHello.exe

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

ildasm MyFile.exe /output:MyFile.il

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

ildasm MyFile.exe /text

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

ildasm MyApp.exe /output:MyApp.il

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

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

W poprzednim przykładzie może być kilka metod o nazwach MyMethod z różnymi podpisami. Następujące polecenie dekompasuje metodę wystąpienia z typem zwracanej wartości void oraz typami parametrów MyMethod int32 i ciągiem.

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

Uwaga

W .NET Framework 1.0 i 1.1 lewy nawias, który następuje po nazwie metody, musi być równoważyć 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ć static metodę Shared (metoda w Visual Basic), pomiń słowo kluczowe instance . Typy klas, które nie są typami pierwotnymi, takie jak i , muszą zawierać przestrzeń nazw i int32 string muszą być poprzedzone słowem kluczowym class . Typy zewnętrzne muszą być poprzedzone nazwą biblioteki umieszczoną w nawiasach kwadratowych. Następujące polecenie dekompasuje metodę statyczną o nazwie MyMethod , która ma jeden parametr typu i zwraca typ AppDomain AppDomain .

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 klasa MyNamespace.MyClass zawiera zagnieżdżone klasy o nazwie NestedClass , klasa zagnieżdżona jest identyfikowana w następujący sposób: class MyNamespace.MyClass/NestedClass .

Zobacz też