Как мне проще всего получить доступ к определенному полю в .NET PE-файле? - PullRequest
2 голосов
/ 07 декабря 2011

Я создаю программу, которая должна сравнивать два файла формата Portable Executable, чтобы увидеть, были ли они скомпилированы из одного и того же кода.Есть поля, которые всегда будут отличаться, даже если код не был изменен.Мое решение состоит в том, чтобы загрузить файлы в мою программу и установить все временные метки и контрольные суммы на ноль, а затем сравнить их.Это прекрасно работает для exe-файлов, но .NET DLL также имеют поле ревизии в потоке # ~, к которому гораздо сложнее получить доступ.Мне нужно было бы проанализировать все заголовки, которые кажутся довольно утомительными, и я был бы счастлив, если бы я мог избежать этого.

Теперь я думаю просто игнорировать весь поток # ~.Могу ли я сделать это и при этом убедиться, что файлы эквивалентны?Чтение времени во всех заголовках кажется пустой тратой времени, когда мне просто нужен адрес одного поля.Если я не могу сделать это, не могли бы вы предложить другие, менее трудоемкие решения?

Могу добавить, что я программирую на C #.

1 Ответ

0 голосов
/ 12 января 2012

Вы пробовали Mono Cecil?Это отличный API для чтения и изменения сборок .NET.

см. http://www.mono -project.com / Cecil

...