Jak mogę przeglądać MSIL / CIL wygenerowane przez kompilator C#? Dlaczego nazywa się assembly?

Jestem nowy w programowaniu. Net C#. Śledzę kilka książek. Mówi się, że zamiast kompilować kod C# bezpośrednio do kodu maszynowego, jest on konwertowany do języka pośredniego (zwanego MSIL aka CIL). Ale kiedy kompiluję, dostaję plik exe / dll.

  1. czy to MSIL / CIL zawarte w tych plikach exe / dll?
  2. Chcę zobaczyć ten pośredni kod języka, żeby poczuć jego istnienie. Jak to zobaczyć?
  3. nazywają ten plik exe / dll assembly. Czy używają tego "wymyślnego słowa" Tylko po to, aby odróżnić je od plików exe / dll, które zawierają natywny / maszynowy kod?
Author: Lightning_A, 2010-07-24

13 answers

  1. tak jest, dokładniej w sekcji .text pliku PE (portable executable = *.exe lub*.dll). Więcej informacji można znaleźć TUTAJ .
  2. najlepszym wyborem jest użycie ILSpy (Reflektor nie jest już wolny). Jest to darmowy disassembler, który może zdemontować Twój zespół do MSIL, ale także C#, VB (w pewnym stopniu). SDK. NET Framework zawiera ILDasm, który jest oficjalnym dissasemblerem MSIL.
  3. Zasadniczo tak. Assembly to plik zawierający Kod MSIL i odpowiadające mu metadane. Nie jest to ograniczone do plików PE per se, ale wszystkie obecne implementacje CLR z nich korzystają.

Jeśli Mogę polecić dobrą książkę na ten temat, jest to Expert. NET 2.0 IL Assembler Serge Lidin. To on zaprojektował MSIL.

 98
Author: Johannes Rudolph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-04 10:05:13

Jednym z moich ulubionych sposobów na zobaczenie IL dla fragmentu C# jest użycie darmowego narzędzia LINQPad. Po wpisaniu kodu i wybraniu" C# statements "u góry (lub" C# Program", w zależności od tego, co pasuje), kliknij przycisk " IL " pod obszarem wprowadzania kodu, a zobaczysz wygenerowany IL.

Używanie do tego Linqpada jest dużo wygodniejsze niż ładowanie Visual Studio lub uruchamianie kompilatora z linii poleceń, a następnie ładowanie ILDASM i Otwieranie pliku. il za pomocą edytor tekstu.

 47
Author: Mark Rushakoff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-24 22:38:41

Jeśli chcesz, aby był on-line, . NET Fiddle jest doskonały. Po prostu wklej swój kod i kliknij opcję View IL W prawym górnym rogu.

 28
Author: nawfal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-30 01:55:48

Inna opcja: Użyj ReSharper

Tutaj wpisz opis obrazka Source / il synced view: left blue background line corresponds with right IL Block

W Visual Studio:

  • Wybierz ReSharper / Windows / IL Viewer
  • lub menu kontekstowe: Nawigacja / kod IL

Obsługuje zsynchronizowany widok kodu źródłowego i IL - po kliknięciu instrukcji w source, odpowiedni blok w IL jest podświetlany (i odwrotnie). Wyświetla opisy dla IL z Microsoft Developer Network i "Common Intermediate Language (CIL) instruction set" ze standardowej specyfikacji ECMA.

Zobacz przeglądanie języka pośredniego (IL) W Resharper Help. Zdjęcie powyżej pochodzi z Resharper Help.

Darmową opcją jest użycie Jetbrains dotPeek

W 2017 roku, po raz pierwszy w Polsce, ukazała się książka pt.: "odkrywanie języka średniozaawansowanego (IL) z ReSharper i dotPeek", autorstwa Maartena Balliauw, styczeń 19, 2017 - JetBrains Blog
 17
Author: Michael Brux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-06 18:09:40
  1. tak jest w zbiorze.
  2. Potrzebujesz . Net Reflector lub ILDasm .
  3. więcej szczegółów na temat kontroli montażu tutaj .

P. S jak śledzicie niektóre książki to gorąco wam polecam CLR via C # .

 12
Author: Incognito,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-24 19:45:19

Uważam, że nazywa się je "zespołami", ponieważ zespół jest zbiorem modułów, zmontowanych razem przez manifest.

montaż wielu plików
(źródło: microsoft.com)

Zobacz Zawartość Zestawu po szczegóły.

 12
Author: John Saunders,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-03 19:06:53

Sharplab Sharplab to narzędzie online, idealne do prostych zastosowań. Wpisz swój kod po lewej, IL pojawia się po prawej.

 11
Author: Colin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-21 15:36:32

Pod wieloma względami zespoły. NET są podobne do pakietów bajtowych Javy.

    Tak. Zawierają również manifesty i inne dane, ale CIL jest częścią EXE / dll.
  1. Użyj ILDasm lub Reflektor - większość ludzi powie, Reflektor, ponieważ jest znacznie mocniejszy. Oba pokażą ci, co CIL został wyprodukowany. Wikipedia ma listę wszystkich instrukcji CIL, dla lepszego samopoczucia(jest jak).
  2. myślę, że jest to zestaw kodu. A dobry sposób na odróżnienie go od rodzimego.
 7
Author: Oded,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-24 19:42:39

Właśnie spędziłem kilka godzin szukając najlepszego narzędzia, które pozwoliłoby mi zobaczyć kod IL bezpośrednio w Visual Studio.

Jedyne rozwiązanie jakie dotychczas znalazłem to Msiler https://visualstudiogallery.msdn.microsoft.com/60fc53d4-e414-461b-a27c-3d5d2a53f637

To działa całkiem dobrze!

W Przeciwnym Razie drugim najlepszym rozwiązaniem, ale bez integracji visual studio, jest JetBrains dotPeek, co jest całkiem niesamowite, szczerze mówiąc.

 7
Author: sebas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-25 16:07:11

Wiem, że to stare pytanie i wolałbym którekolwiek z powyższych narzędzi. Jednak, w szczypcie, istnieje MSIL viewer w polu z Visual Studio od co najmniej wersji 2005.

Narzędzie ma nazwę ildasm.exe i znajduje się w następujących folderach po domyślnych instalacjach programu Visual Studio:

Visual Studio 2005 "C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin\ildasm.exe"

Visual Studio 2008 "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\ildasm.exe"

Visual Studio 2010 "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\ildasm.exe"

Aby uzyskać więcej informacji, zobacz: "Jak: wyświetl montaż Spis treści " w bibliotece MSDN.

 5
Author: bopapa_1979,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-24 17:24:57

Z mojego doświadczenia wynika, że najlepszym źródłem wiedzy związanej z IL jest Andrew Troelsen "Pro C# i platforma. NET". Począwszy od trzeciego wydania ma naprawdę, naprawdę wybitny rozdział (około 50 stron) o tym, jak rozumieć IL, a nawet pisać własny kod i używać ILAsm. Wykorzystałem te informacje do zbadania, czy istnieje wiele dziedziczeń w świecie. NET. Możesz też spróbować wykorzystać kilka bardzo ciekawych funkcji w IL (np. filtrowanie wyjątków, które istnieją tylko w VB, ale nie w C#).

Gorąco polecam przeczytać ten rozdział.

Ostatecznie. NET Reflector jest standardem korporacyjnym do badania kodu IL zespołów i książka Richtera jest zdecydowanie" must read " rzeczy. Ale z innych książek, jak wspomniano powyżej, można ujawnić naprawdę przydatne rzeczy:)

Tak, każdy zespół w świecie. NET posiada jakiś kod IL (wraz z manifestem), który można oglądać przez reflektor lub ILDasm. Co więcej, Reflector może pokazać ci kod zoptymalizowany w C# i VB. Oznacza to, że każda osoba może przeglądać kod źródłowy zestawu i dlatego w produktach komercyjnych używane są zaciemniacze.

 2
Author: xenn_33,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-24 22:36:43

Chcę zobaczyć język pośredni, spróbuj pobrać JustDecompile z Telerik (który jest obecnie darmowy, wymaga rejestracji choć).

Przeciągnij DLL i wybierz IL z rozwijanego pola u góry!

 2
Author: Luke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-10 10:39:29

Jest teraz inna opcja. Możesz to zrobić w VS Code z tym rozszerzeniem zbudowanym z Roslyn. Jest to obecnie ograniczone do. Net Core .

 0
Author: Adam Caviness,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-25 16:11:35