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.
- czy to MSIL / CIL zawarte w tych plikach exe / dll? Chcę zobaczyć ten pośredni kod języka, żeby poczuć jego istnienie. Jak to zobaczyć?
- 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?
13 answers
- tak jest, dokładniej w sekcji
.text
pliku PE (portable executable = *.exe lub*.dll). Więcej informacji można znaleźć TUTAJ . - 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. 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.
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.
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.
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
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 BlogWarning: 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
- tak jest w zbiorze.
- Potrzebujesz . Net Reflector lub ILDasm .
- 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 # .
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.
(źródło: microsoft.com)
Zobacz Zawartość Zestawu po szczegóły.
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 to narzędzie online, idealne do prostych zastosowań. Wpisz swój kod po lewej, IL pojawia się po prawej.
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.
- 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).
- myślę, że jest to zestaw kodu. A dobry sposób na odróżnienie go od rodzimego.
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.
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.
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.
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!
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 .
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