Мне нужно написать относительно небольшую программу для синтаксического анализа исполняемых файлов .net и генерации списка вызовов внешним методам. Например, если внутри файла вызывается System.Console.WriteLine
, инструмент должен печатать, что System.Console.WriteLine
называется где-то. Я не могу (ограниченный мозг и время) и не нуждаюсь (все, что мне нужно, это список вызовов), реализуют реальную разборку. Я хочу grep friendly perl friendly относительно короткое решение, которое записывает имена вызываемых функций и смещение, где произошел звонок.Частично дизассемблировать .net исполняемый файл
Вещи, которые я уже пробовал:
Скачивание функции от MSDN. Теперь я знаю, что статический вызов переведен в
0x28
в байт-код. :) За ним следует дескриптор метода, но понимание того, что означает дескриптор метода, вероятно, потребует прочтения всей спецификации.Открытие простого exe в рефлекторе. Рефлектор точно воспроизвел код моего оригинального приложения, но я не могу видеть байт-код для вызовов.
Возможно ли реализовать требуемые ограниченные функциональные возможности с ограниченным временем и знаниями?
Если да, то что я знаю для его реализации? Есть ли инструкция «CIL assembly for dummies»?
В рефлекторе вы можете «проанализировать» метод и узнать, где он используется (называется) из других загруженных сборок. Идя в другом направлении, я не уверен ... –
Спасибо, Agent_9191, я пропустил это. – Muxecoid
Анализ фактически не показывает вам байтовый код, где он используется. Он отображает список зависимостей со всеми используемыми вызовами, но список зависимостей ничего не говорит о местоположении вызова относительно начала файла exe или о фрагменте байт-кода, ответственном за фактический вызов. – Muxecoid