Получение IL-кода из бинарного файла DLL

Я изучаю ИЛ.

Мне нравится инструмент .Net Reflector от RedGate (изначально Lutz). У меня уже есть книги Сержа Лидина и Ecma-335. Похоже, это все, что нам нужно для работы с IL (кроме ILAsm и ILDasm, конечно).

Моя задача — разобрать бинарный файл сборки и получить IL-код. Очевидно, что сборка представляет собой бинарный файл; следовательно, это просто цепочка байтов. Чтобы делать то, что я хочу, мне нужно знать структуру сборки: какие заголовки существуют, сколько байтов они занимают, смещения в байтах для чтения байт за байтом и т. д.

В книге Лидина это описано, но для меня это не на 100% понятно. Кто-нибудь пытался разобрать DLL как поток байтов? Иметь метаданные и код IL в виде потоков байтов, а затем анализировать поток байтов IL, чтобы получить источник IL? Я не хочу использовать отражение здесь; Я бы предпочел работать только с бинарным файлом.

Моно Сесил делает то же самое? Даже если так, я хотел бы знать, как это сделать.

И да, я пытаюсь создать еще одно колесо, подобное .NET Reflector, и я хочу знать, как оно сделано. Как кто-то сказал: «Лутц не обязательно должен быть единственным человеком в мире, который умеет это делать».

Кстати, как работает ISDasm? Это было закодировано в .net?

Любые мысли, ресурсы, примеры?

Спасибо.


person Antipod    schedule 25.08.2009    source источник


Ответы (2)


Mono.Cecil делает именно то, что вы хотите сделать. Итак, вы можете взглянуть на исходный код.

Фактически, существует действующий проект под названием Cecil.Decompiler, от Jb Evain, на основе Cecil, декомпилятора .NET с открытым исходным кодом.

person Romain Verdier    schedule 25.08.2009
comment
Вы не знаете, где я могу скачать исходники? Следующий URL-адрес anonsvn.mono-project.com/source/trunk/cecil/decompiler у меня не работает. Спасибо. - person Antipod; 26.08.2009

Вы можете использовать ildasm напрямую:

ildasm.exe MyFile.dll /output:MyFile.il

Это может быть автоматизировано из вашей программы.

person Darin Dimitrov    schedule 25.08.2009
comment
Представьте, что я хочу написать свой собственный ildasm.exe. Просто чтобы лучше понять структуру IL и DLL. - person Antipod; 25.08.2009