Неужели нет способа "сгенерировать" C # из байта [], содержащего IL с методом body? - PullRequest
0 голосов
/ 08 января 2019

Я поигрался с реверсированием некоторого запутанного кода, и наткнулся на одну хитрую DLL, которая имела «тело метода» (код IL) в массиве byte [] и позже вызывала его с помощью dynamic вызов. Является ли анализ MSIL единственным способом здесь? Как вы справляетесь с этим?

Я потратил часы на поиски инструментов в Интернете, которые позволили бы мне генерировать код C # (по крайней мере, некоторые основы) из IL в байтовом массиве. Неужели их нет?

ldarg.0
ldarg.1     
add

Было бы замечательно, если бы что-то существовало, что могло бы с некоторым базовым MSIL, как описано выше, генерировать + b.

1 Ответ

0 голосов
/ 08 января 2019

MZ64, привет и добро пожаловать на SO!

К сожалению, вы спрашиваете о службе / API / инструменте декомпилятора, и она просто не встроена в .NET Framework. Вы можете проверить различные сторонние решения для этого.

В те времена .NET Reflector был инструментом №1 для этого. Сегодня существуют различные инструменты, в частности dotPeek - и Reflector все еще должен быть рядом. Вам придется заплатить немного денег за большинство из них, но вы можете найти хороший бесплатный инструмент (я попробовал и потерпел неудачу).

Однако, если вы хотите взять код IL в виде простого текста и просто попытаться запустить его, вам следует использовать встроенный ILGenerator.Emit (). Самым простым способом, который я могу придумать, должно быть сопоставление вашего простого текста с OpCode / переменными и построчная генерация вашего IL. Я не знаю, помогает ли это, но теоретически это должно быть возможно.

Посмотрите здесь пример:

https://docs.microsoft.com/en-us/dotnet/framework/reflection-and-codedom/how-to-define-and-execute-dynamic-methods

...