Создание PE-файла с помощью IMetaDataEmit :: Save (/ ToMemory / ToStream) - PullRequest
2 голосов
/ 22 апреля 2019

Я пишу собственный CLR Profiler, который выполняет некоторые тяжелые переписывания IL. При разработке новой функции мы иногда сталкиваемся с ошибкой проверки CLR. Для небольших методов довольно легко сравнить байты до и после, просматривая различные элементы (главным образом, заголовок метода, сигнатуру, локальные коды, код и таблицу исключений) и находя ошибку. Иногда это может быть связано с огромными методами, и этот процесс может занять некоторое время. Я пытаюсь сбросить текущий модуль в файл, чтобы легко запустить peverify.exe (и https://github.com/dotnet/corert/tree/master/src/ILVerify). Я нашел IMetaDataEmit :: Save, который отлично выглядит на бумаге (мы постоянно используем IMetaDataEmit для перезаписи IL). Я могу вывести свой модуль, открыть его в программе просмотра в шестнадцатеричном формате и посмотреть сделанные мной изменения. Тем не менее, это только дамп модуля (каталог .Net внутри PE). Как я могу создать полный PE (dll / exe) из этого модуля, желательно программно?

...