Получение кода IL из двоичного файла DLL - PullRequest
1 голос
/ 25 августа 2009

Я занимаюсь ИЛ.

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

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

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

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

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

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

Есть мысли, ресурсы, примеры?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 25 августа 2009

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

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

0 голосов
/ 25 августа 2009

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

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

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

...