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 filename elementem , zamiast wyświetlać wyniki w graficznym interfejsie użytkownika. |
/Rtf | Generuje wyjście w formacie RTF. Nieprawidłowy z opcją /text . |
/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. |
Następujące dodatkowe opcje są dostępne dla plików.exe, .dlli .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. |
/Projektu | 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. |
/Źródła | 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 |
---|---|
/Wszystkie | Określa kombinację opcji /header, /bytes, /stats, /classlist i /tokens . |
/classlist | Dołącza listę klas zdefiniowanych w module. |
/Przekazania | Używa deklaracji przekazującej klasy. |
/Nagłówki | Dołącza informacje nagłówka pliku do wyjścia. |
/Element:class [::member [(sig ]] |
W zależności od określonego argumentu dezasembluje następujące obiekty: - Dezasembluje określony class element .- 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. |
/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. |
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 — pokaż informacje w szesnastkowym i w słowach. CSV — pokaż liczby rekordów i rozmiary sterty. UNREX — pokaż nierozwiązane zewnętrzne jednostki zewnętrzne. SCHEMA — pokaż informacje o nagłówku metadanych i schemacie. RAW — pokaż nieprzetworzone tabele metadanych. HEAPS — pokaż surowe sterty. 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 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 pomocą 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 ciąg ildasm w wierszu polecenia bez podawania 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 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 nazwie 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.
Aby określić, czy plik jest zarządzany, można uruchomić Ildasm.exe za pośrednictwem an.exe lub pliku.dll . 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 marszałek 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 .NET Framework 4.5, Ildasm.exe wyświetla atrybuty stosowane do implementacji interfejsu, jak pokazano w poniższym fragmcie 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żytkownikaIldasm.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 tworzy cztery pliki: MyApp.il, MyApp.res, Icon.resources i Message.resources:
ildasm MyApp.exe /output:MyApp.il
Następujące polecenie dezasembluje metodę MyMethod
w klasie MyClass
w programie 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 z typem zwrotnym void i typami parametrów int32 i ciągiem.
ildasm /item:"MyClass::MyMethod(instance void(int32,string)" MyFile.exe /text
Uwaga
W .NET Framework wersji 1.0 i 1.1 nawias lewy zgodny z nazwą metody musi być zrównoważony 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 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 zagnieżdżona klasę o nazwie NestedClass
, zagnieżdżona klasa jest identyfikowana w następujący sposób: class MyNamespace.MyClass/NestedClass
.
Zobacz też
Opinia
Prześlij i wyświetl opinię dla