#asp.net #.net #dll #reflection
#asp.net #.net #dll #отражение
Вопрос:
Я пытался найти больше информации о технике обнаружения dll и exe путем написания программ с использованием ASP .Сеть и отражение (?). Я ничего не смог найти.
Я знаю, что есть сборщики, но я не заинтересован в запуске других инструментов и дизассемблировании кода, скажем, меня больше интересует понимание того, как написать программу, которая принимает неизвестный файл или исполняемый файл и определяет свойства и методы внутри, которые являются общедоступными.
Я только начинаю свой поиск этого и задавался вопросом о каких-либо хороших ресурсах для ускорения процесса обучения.
Ответ №1:
Меня больше интересует понимание того, как написать программу, которая принимает неизвестный файл или исполняемый файл и определяет свойства и методы, которые являются общедоступными.
Отражение — хороший способ сделать это. Вот несколько советов, если вам не нужно полное объяснение кода.
-
Вы можете использовать
Assembly.ReflectionOnlyLoad
для загрузки существующей сборки. Это будет работать только для .СЕТЕВЫЕ сборки. Разница междуLoad
иReflectionOnlyLoad
заключается в том, чтоLoad
загружается сборка, которая позволяет вам ее использовать, например, выполнение метода для типа в этой сборке.ReflectionOnlyLoad
полезно, когда вы хотите только посмотреть, что находится в сборке, не выполняя никакого кода. Другим преимуществомReflectionOnlyLoad
является то, что ему все равно, для какой платформы была скомпилирована сборка. -
После того, как у вас есть сборка, вы можете использовать метод, подобный
GetExportedTypes
для получения списка всех общедоступных типов. Если вы хотите получить общедоступные и непубличные, вы можете использовать justGetTypes
() . -
Итак, теперь у нас загружена наша сборка и список всех типов.
Type
Класс имеет несколько членов для работы с этим типом. На ум приходят GetMethod и GetProperties.
Вы можете обратиться к этой статье MSDN для более общего обзора отражения.
Комментарии:
1. Для меня это хорошее начало. Означает ли это, что если я хочу обнаружить другие библиотеки DLL, которые, возможно, не были написаны на .net, мне нужно будет использовать другой язык. Будет ли c лучшим выбором для написания неизвестной проблемы dll. По вашему мнению, какой язык лучше всего выбрать и какие методы лучше всего использовать для гибкой проверки dll?
2. @byten . NET хранит всю свою информацию совсем по-другому, чем собственный двоичный файл. Если вы хотите узнать больше о библиотеках DLL, которые не были написаны для . NET Я бы начал изучать формат файла PE