2009-10-26 2 views
4

Есть ли способ динамически вставить байт-код непосредственно в мой исполняемый файл C#? Я ищу функциональность, похожую на ключевое слово asm в C++. Очевидно, я знаю, что не могу вставлять инструкции сборки x86. Я мог бы только вставить IL Bytecode.Прямая вставка байткода

ответ

5

Да, вы можете использовать DynamicMethod s, которые в основном делают именно это (вы получаете делегата для вызова кода, который вы создали с помощью динамического метода).

Фактически, некоторые части фреймворка, похоже, используют их, включая скомпилированные преобразования XSL, скомпилированные регулярные выражения и т. Д. Они работают очень хорошо, и они довольно эффективны (после первоначальных накладных расходов для их создания/компиляции).

+0

Именно то, что я искал! Спасибо приятель! – Icemanind

+0

Добро пожаловать. Некоторая интересная информация может быть найдена здесь, на SO: http://stackoverflow.com/questions/tagged/dynamicmethod (и один образец у меня здесь: http://stackoverflow.com/questions/1516119) - получайте удовольствие! ;) – Lucero

1

Вы можете использовать Reflection.Emit directy - вы должны создать сборку/модуль/класс/метод и вставить IL на тело метода.

-

.NET 2.0 вы можете использовать DynamicMethod, который может быть скомпилирован в качестве делегата, так что вам не нужно создавать сборки/модуля/класс динамически.

-

С .Net 3.0 вы можете использовать ExpressionTrees динамически генерировать код и прикрепить к делегату.

-

Надеюсь, это поможет.

Ricardo Lacerda Castelo Branco

Смежные вопросы