2009-08-25 3 views
1

Я изучаю IL.Получение кода IL из двоичного файла DLL

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

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

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

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

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

BTW, как работает ISDasm? Был ли он закодирован в .net?

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

спасибо.

ответ

3

Mono.Cecil делает именно то, что вы хотите сделать. Таким образом, вы можете посмотреть исходный код.

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

+0

Вы знаете, где я могу скачать источники? Следующий URL-адрес http://anonsvn.mono-project.com/source/trunk/cecil/decompiler не работает для меня. Спасибо. – Antipod

+0

Ну, похоже, это работает. Могу я попросить вас повторить попытку? –

+0

Да, сейчас работает. Спасибо. – Antipod

0

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

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

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

+0

Представьте, что я хочу написать свой собственный ildasm.exe. Просто лучше понять структуру IL и DLL. – Antipod