AVK Selected
Показавшиеся интересными, на мой вкус, посты
Трансформация IL-кода
19.09.2012
|
kochetkov.vladimir |
Задача: разобрать бинарную сборку в объектное представление, пробежаться по получившемуся дереву и внести некоторые изменения в узлы, попадающие под заданные шаблоны/критерии. После чего сохранить результат в виде работающей сборки.
Для подобных задач с исходным кодом, сходу на ум приходят TXL (прямо под это и заточен) и Nemerle (прямо не заточен, но относительно ненапряжно реализовать). А есть ли уже готовые библиотеки для реализации вышеописанного? Декомпиляция в исходный код на каком-либо языке и сведение задачи к его разбору и трансформации элементов AST в качестве решения не очень подходит.
Для подобных задач с исходным кодом, сходу на ум приходят TXL (прямо под это и заточен) и Nemerle (прямо не заточен, но относительно ненапряжно реализовать). А есть ли уже готовые библиотеки для реализации вышеописанного? Декомпиляция в исходный код на каком-либо языке и сведение задачи к его разбору и трансформации элементов AST в качестве решения не очень подходит.
... << RSDN@Home 1.2.0 alpha 5 rev. 66>>
19.09.2012 5 комментариев |
KV>Задача: разобрать бинарную сборку в объектное представление, пробежаться по получившемуся дереву и внести некоторые изменения в узлы, попадающие под заданные шаблоны/критерии. После чего сохранить результат в виде работающей сборки.
Возможно подойдет Mono.Cecil
Но если декомпилировать IL в исходники, то потом думается можно попробовать использовать Microsoft Roslyn
KV>Задача: разобрать бинарную сборку в объектное представление, пробежаться по получившемуся дереву и внести некоторые изменения в узлы, попадающие под заданные шаблоны/критерии. После чего сохранить результат в виде работающей сборки.
В принципе, именно под это заточен http://cciast.codeplex.com/ но беда его в том, что ему катастрофически не хватает документации. Причем вроде и примеры есть и документ для старта, и куча примеров — а все равно как-то очень туго идет. Но может это я такой "тугой".
Не знаю на сколько лучше обстоят дела с Mono.Cecil, но один факт, что его за пределами Microsoft используют чаще уже подводит к выводу, что у него с порогом вхождения дела лучше.
У уже предложенного Mono.Cecil есть: ILProcessor, MethodBody. Посмотри — классы не очень большие, разобраться думаю можно.
У MethodBody есть Instructions — коллекция инструкций, а с помощью ILProcessor можно переписывать тело метода. Возможности не фантастические конечно, но вполне может быть достаточно. Тем более сам класс Instruction конечно не особо будет удобен, но жить всё можно.
KV>Задача: разобрать бинарную сборку в объектное представление, пробежаться по получившемуся дереву и внести некоторые изменения в узлы, попадающие под заданные шаблоны/критерии. После чего сохранить результат в виде работающей сборки.
Попробуй пообщаться с @philiplaureano, его Tao пишется специально для этих целей. Только я не очень в курсе, насколько оно готово. Если задача простая, в принципе должно хватить и Cecil.