Udostępnij za pośrednictwem


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ć narzędzie, użyj wiersza polecenia dla deweloperów programu Visual Studio lub programu Visual Studio Developer PowerShell.

W wierszu polecenia wpisz:

Składnia

ildasm [options] [PEfilename] [options]

Parametry

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

Opcja Opis
/out= filename Tworzy plik wyjściowy z określonym filenameelementem , a nie wyświetla wyniki w graficznym interfejsie użytkownika.
/Rtf Generuje wyjście w formacie RTF. Nieprawidłowy z /text opcji.
/Tekst 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.

Dostępne są następujące dodatkowe opcje dla plików .exe, .dll i winmd .

Opcja Opis
/Bajtów 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.
/projekt Wyświetla metadane w sposób, w jaki jest wyświetlany kod zarządzany, zamiast sposobu wyświetlania go w natywnym środowisko wykonawcze systemu Windows. Jeśli PEfilename nie jest to plik metadanych systemu Windows (winmd), ta opcja nie ma wpływu. Zobacz Obsługa programu .NET Framework dla 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.
/źródło Wyświetla wiersze z oryginalnego źródła jako komentarze.
/Tokeny 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 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.

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

Opcja Opis
/cały Określa kombinację opcji /header, /bytes, /stats, /classlist i /tokens .
/classlist Dołącza listę klas zdefiniowanych w module.
/naprzód Używa deklaracji przekazującej klasy.
/Nagłówki 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 programie .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.
/Statystyki 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 tylko dla plików wyjściowych plików .exe, .dll, .obj, .lib i winmd .

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

MDHEADER — pokaż informacje i rozmiary nagłówka metadanych.

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

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

UNREX — pokaż nierozwiązane zewnętrzne.

SCHEMA — pokaż informacje o nagłówku metadanych i schemacie.

RAW — pokaż nieprzetworzone tabele metadanych.

HEAPS — pokaż surowe stertki.

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 plików lub danych wyjściowych konsoli.

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

Uwaga

Wszystkie opcje dla Ildasm.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 równoważna /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.exe wynikowy 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 w 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 samouczek Ildasm.exe znajdujący się w folderze Samples dostarczanym z zestawem Windows SDK.

Jeśli podasz Ildasm.exe z argumentem PEfilename zawierającym zasoby osadzone, 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 zawiera 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 an.exe lub pliku .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 programu .NET Framework 4.5, Ildasm.exe obsługuje nierozpoznany marshaling blOB (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 programu .NET Framework 4.5, Ildasm.exe wyświetla atrybuty stosowane do implementacji interfejsu, jak pokazano na poniższym fragcie z danych wyjściowych Ildasm.exe :

.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 będą 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 pliku MyFile.exe 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 za pomocą zwracanego typu void oraz typów parametrów int32 i ciągów.

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

Uwaga

W programie .NET Framework w wersji 1.0 i 1.1 lewy nawias zgodny z nazwą metody musi być wyważony przez prawy nawias po podpisie: MyMethod(instance void(int32)). Począwszy od programu .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 statyczną metodę o nazwie MyMethod , która ma jeden parametr typu AppDomain i ma zwracany typ 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 MyNamespace.MyClass klasa zawiera klasę zagnieżdżona o nazwie NestedClass, zagnieżdżona klasa jest identyfikowana w następujący sposób: class MyNamespace.MyClass/NestedClass.

Zobacz też