Возможно. Это зависит.
В Mono Project есть библиотека Cecil, доступ к которой вы можете получить здесь:
http://mono -project.com / Cecil
Однако это управляемый код, который нельзя вызвать во время профилирования. У вас может быть несколько вариантов:
- Использовать IPC. Вы можете запустить новый процесс, выполнив переписывание с использованием cecil в этом процессе, а затем передать байты обратно в профилировщик, используя именованные каналы.
- Порт CECIL для C ++. Код распространяется под лицензией MIT / X11, поэтому вы можете сделать это без необходимости делиться своими изменениями.
- Просто напишите свои собственные вещи с нуля.
# 1 вводит кучу дополнительных сложностей. Ваш профилировщик в конечном итоге будет иметь больше движущихся частей, чем это действительно необходимо. Кроме того, IPC вводит кучу дополнительных накладных расходов.
# 2 займет много времени. Учитывая, что Сесил все еще только в версии 0.6, это может не стоить времени на это, по сравнению с написанием вашей собственной реализации.
# 3 даст вам максимальную степень контроля и, вероятно, будет наиболее эффективным. Однако для этого потребуется значительно больше усилий, чем для первого.