Jestem nowy w programowaniu .NET C #. Śledzę kilka książek. Mówi się, że zamiast kompilować go bezpośrednio do kodu binarnego (kod natywny). Kod wysokiego poziomu jest konwertowany na język średniozaawansowany (zwany MSIL aka CIL). Ale kiedy kompiluję, otrzymuję plik exe / dll.
- Czy ten plik MSIL / CIL jest zawarty w tych plikach exe / dll?
- Chcę zobaczyć ten kod języka pośredniego. Tylko po to, żeby poczuć jego istnienie. Jak to zobaczyć?
- Nazywają ten plik exe / dll rozszerzeniem
assembly
. Czy używają tego „fantazyjnego słowa” tylko po to, aby odróżnić je od plików exe / dll, które zawierają kod binarny (kod natywny)?
c#
.net
assemblies
starblue
źródło
źródło
Odpowiedzi:
.text
sekcji pliku PE (przenośny plik wykonywalny = * .exe lub * .dll). Więcej informacji można znaleźć tutaj .Jeśli mogę polecić dobrą książkę na ten temat, to jest to Expert .NET 2.0 IL Assembler autorstwa Serge'a Lidina. To facet, który zaprojektował MSIL.
źródło
.text
seksie? Jeśli nie, co.text
zawiera? i co słychać w#
myślach, że sekcje zaczynają się od.
. Więc nie mogło być.strings
Jednym z moich ulubionych sposobów wyświetlania IL dla fragmentu C # jest użycie bezpłatnego narzędzia LINQPad . Po wprowadzeniu kodu i wybraniu „instrukcji C #” u góry (lub „Programu C #”, w zależności od tego, który pasuje), kliknij przycisk „IL” pod obszarem wprowadzania kodu, a zobaczysz wygenerowany IL.
Używanie LINQPad do tego jest znacznie wygodniejsze niż ładowanie programu Visual Studio lub uruchamianie kompilatora z wiersza polecenia, a następnie ładowanie ILDASM i otwieranie pliku .il za pomocą edytora tekstu.
źródło
Jeśli chcesz mieć to w Internecie, .NET Fiddle jest doskonałe. Po prostu wklej swój kod i kliknij
View IL
opcję w prawym górnym rogu.źródło
Inna opcja: użyj ReSharper
Widok zsynchronizowany ze źródłem / IL: lewa niebieska linia tła odpowiada prawemu blokowi IL
W programie Visual Studio:
Obsługuje zsynchronizowany widok kodu źródłowego i IL - po kliknięciu instrukcji w źródle odpowiedni blok w języku IL jest podświetlany (i odwrotnie). Wyświetla opisy dla języka IL z Microsoft Developer Network i „Zestaw instrukcji wspólnego języka pośredniego (CIL)” ze standardowej specyfikacji ECMA.
zobacz Wyświetlanie języka pośredniego (IL) w pomocy Resharper. Zdjęcie powyżej pochodzi od Resharper Help.
Bezpłatną opcją jest użycie Jetbrains dotPeek
zobacz także: „Exploring Intermediate Language (IL) with ReSharper and dotPeek”, Maarten Balliauw, 19 stycznia 2017 - Jetbrains Blog
źródło
PS Ponieważ śledzisz niektóre książki, gorąco polecam CLR za pośrednictwem C # .
źródło
Uważam, że są one nazywane „zestawami”, ponieważ zestaw to zestaw modułów połączonych razem przez manifest.
(źródło: microsoft.com )
Aby uzyskać szczegółowe informacje, patrz Zawartość zestawu.
źródło
sharplab to narzędzie online, idealne do prostych przypadków użycia. Wpisz swój kod po lewej stronie, po prawej pojawi się IL.
źródło
Pod wieloma względami zestawy .NET są podobne do pakietów kodu bajtowego Java.
źródło
Właśnie spędziłem kilka godzin na poszukiwaniu najlepszego narzędzia, które pozwoliłoby mi przeglądać kod IL bezpośrednio w programie Visual Studio.
Jedynym rozwiązaniem, które do tej pory znalazłem, jest Msiler https://visualstudiogallery.msdn.microsoft.com/60fc53d4-e414-461b-a27c-3d5d2a53f637
działa całkiem dobrze!
Poza tym drugim najlepszym rozwiązaniem, ale bez integracji ze studiem wizualnym, jest JetBrains dotPeek, co jest całkiem niesamowite, szczerze mówiąc.
źródło
Wiem, że to stare pytanie i wolałbym dowolne z powyższych narzędzi. Jednak w skrócie, w pudełku z Visual Studio była przeglądarka MSIL od co najmniej wersji 2005.
Narzędzie nosi 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: „ How to: View Assembly Contents ” w bibliotece MSDN.
źródło
Z mojego doświadczenia wynika, że najlepszym źródłem wiedzy związanej z IL jest Andrew Troelsen „Pro C # and .NET Platform”. Począwszy od 3. wydania ma naprawdę, naprawdę wyjątkowy 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 w świecie .NET istnieje wielokrotne dziedziczenie. Możesz także spróbować zastosować kilka bardzo interesujących funkcji w IL (np. Filtrowanie wyjątków, które istnieją tylko w VB, ale nie w C #).
Gorąco polecam przeczytanie tego rozdziału.
Ostatecznie .NET Reflector jest standardem korporacyjnym do badania kodu IL złożeń, a książka Richtera jest zdecydowanie „obowiązkowa”. Ale z innych książek, takich jak wspomniane powyżej, możesz ujawnić naprawdę przydatne rzeczy :)
Tak, każdy zestaw w świecie .NET zawiera kod IL (wraz z manifestem), który może być przeglądany przez Reflector lub ILDasm. Co więcej, Reflector może pokazać Ci kod zoptymalizowany pod kątem C # i VB. Oznacza to, że każda osoba może zobaczyć kod źródłowy zestawu i dlatego w produktach komercyjnych stosuje się zaciemniacze.
źródło
Chcę zobaczyć język pośredni, Spróbuj pobrać JustDecompile z Telerik (który jest obecnie bezpłatny, wymaga jednak rejestracji).
Przeciągnij bibliotekę DLL i wybierz ją
IL
z listy rozwijanej u góry!źródło
Jest teraz inna opcja. Możesz to zrobić w programie VS Code z tym rozszerzeniem skompilowanym z Roslyn. Obecnie jest to ograniczone do platformy .NET Core .
źródło