Программно сравнить IL двух методов - PullRequest
4 голосов
/ 15 сентября 2010

У меня есть скомпилированная сборка. Я хочу программно сравнить реализацию метода одного из методов в этой сборке с тем, что я ожидаю.

Есть ли способ сравнить их IL? Даже если я смогу получить представление массива байтов любого набора инструкций, я буду в хорошем месте.

Помощь оценена.

Ответы [ 5 ]

4 голосов
/ 15 сентября 2010

Вы можете попробовать использовать Reflection и сравнить IL с помощью байтовых массивов.

Взгляните на этот метод: http://msdn.microsoft.com/en-us/library/system.reflection.methodbody.getilasbytearray.aspx

4 голосов
/ 15 сентября 2010

Использование Mono.Cecil может быть хорошим началом.Cecil - это библиотека, используемая для чтения и изменения сборок CLR, которая будет выполнять для вас весь анализ файла, вплоть до получения байт-кода CIL.

Другая потенциальная библиотека, которую вы можете использовать: Boogie

3 голосов
/ 15 сентября 2010

Вы можете сбросить сборки, используя ildasm, и различить две версии следующим образом:

ildasm /ALL /TEXT assembly1.dll > dump1.txt
ildasm /ALL /TEXT assembly2.dll > dump2.txt
fc dump1.txt dump2.txt       
0 голосов
/ 15 сентября 2010

Вы можете использовать ildasm или отражатель для извлечения IL из сборки

0 голосов
/ 15 сентября 2010

вы можете использовать ildasm.exe из командной строки visual studio и сделать что-то вроде ildasm.exe dll name

...