AVK Selected

Показавшиеся интересными, на мой вкус, посты

Трансформация IL-кода

kochetkov.vladimir kochetkov.vladimir
Задача: разобрать бинарную сборку в объектное представление, пробежаться по получившемуся дереву и внести некоторые изменения в узлы, попадающие под заданные шаблоны/критерии. После чего сохранить результат в виде работающей сборки.

Для подобных задач с исходным кодом, сходу на ум приходят TXL (прямо под это и заточен) и Nemerle (прямо не заточен, но относительно ненапряжно реализовать). А есть ли уже готовые библиотеки для реализации вышеописанного? Декомпиляция в исходный код на каком-либо языке и сведение задачи к его разбору и трансформации элементов AST в качестве решения не очень подходит.
... << RSDN@Home 1.2.0 alpha 5 rev. 66>>
gravatar
Аноним
19.09.2012 11:30
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Задача: разобрать бинарную сборку в объектное представление, пробежаться по получившемуся дереву и внести некоторые изменения в узлы, попадающие под заданные шаблоны/критерии. После чего сохранить результат в виде работающей сборки.


Возможно подойдет Mono.Cecil
dimaka
dimaka
19.09.2012 01:03
Разбора бинарной сборки нечего в голову не приходит.
Но если декомпилировать IL в исходники, то потом думается можно попробовать использовать Microsoft Roslyn
Михаил Романов
Михаил Романов
19.09.2012 01:34
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Задача: разобрать бинарную сборку в объектное представление, пробежаться по получившемуся дереву и внести некоторые изменения в узлы, попадающие под заданные шаблоны/критерии. После чего сохранить результат в виде работающей сборки.


В принципе, именно под это заточен http://cciast.codeplex.com/ но беда его в том, что ему катастрофически не хватает документации. Причем вроде и примеры есть и документ для старта, и куча примеров — а все равно как-то очень туго идет. Но может это я такой "тугой".

Не знаю на сколько лучше обстоят дела с Mono.Cecil, но один факт, что его за пределами Microsoft используют чаще уже подводит к выводу, что у него с порогом вхождения дела лучше.
fddima
fddima
19.09.2012 04:26
Здравствуйте, kochetkov.vladimir, Вы писали:

У уже предложенного Mono.Cecil есть: ILProcessor, MethodBody. Посмотри — классы не очень большие, разобраться думаю можно.
У MethodBody есть Instructions — коллекция инструкций, а с помощью ILProcessor можно переписывать тело метода. Возможности не фантастические конечно, но вполне может быть достаточно. Тем более сам класс Instruction конечно не особо будет удобен, но жить всё можно.
Ziaw
Ziaw
20.09.2012 04:12
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Задача: разобрать бинарную сборку в объектное представление, пробежаться по получившемуся дереву и внести некоторые изменения в узлы, попадающие под заданные шаблоны/критерии. После чего сохранить результат в виде работающей сборки.


Попробуй пообщаться с @philiplaureano, его Tao пишется специально для этих целей. Только я не очень в курсе, насколько оно готово. Если задача простая, в принципе должно хватить и Cecil.