Как использовать отражение, чтобы создать "машину отражения"

Хорошо, так что название немного отстой, но я не мог придумать ничего лучше (может, кто-то еще может?).

Итак, у меня есть несколько вопросов по теме здесь. Я хочу создать программу, которая может взять объект и использовать отражение, чтобы перечислить все его свойства, методы, конструкторы и т. Д. Затем я могу манипулировать этими объектами во время выполнения, чтобы протестировать, отладить и выяснить, что именно некоторые из моих классов / программы работают во время их работы (некоторые из них будут службами Windows и, возможно, будут установлены на компьютере, а не запущены в режиме отладки из VS).

Таким образом, я бы предоставил хук программе, чтобы с локальной машины (только) эта программа могла получить экземпляр основного объекта и, следовательно, увидеть все подчиненные объекты, работающие в нем. (для безопасности может потребоваться запустить программу с аргументом arg, чтобы открыть этот хук).

"Машина отражения" позволила бы манипулировать во время выполнения и допросить.

Возможно ли это звучит?

Должна ли программа предоставить хук или "машина отражения" может взять EXE и (если она знает все используемые классы) создать объект для использования?

Я знаю, что вы можете импортировать DLL во время выполнения, чтобы он знал обо всех видах классов, но можете ли вы импортировать отдельные классы? IE Скажем, у меня есть проект 'Y', который не скомпилирован в DLL, но я хочу использовать на нем "машину отражения", могу ли я указать на этот каталог и взять файлы, чтобы иметь возможность ссылаться на эти классы?

РЕДАКТИРОВАТЬ: Я хотел бы попробовать и развивать его сам, но у меня уже есть длинный список проектов, которые я хотел бы сделать и уже начал. Зачем изобретать велосипед, когда уже есть большой выбор на выбор.

4 ответа

Решение

Попробуйте посмотреть на Crack.NET. Он используется для манипулирования во время выполнения и опроса в WPF/WinForms, но источник доступен и может быть хорошим началом, если он уже не соответствует вашим потребностям.

Звучит так, как будто Соколиный Глаз Корнелиу Туснеа может быть близок к тому, что вы ищите во время выполнения запроса объектов / свойств / и т. Д. Он называет это.NET Runtime Object Editor. Я не уверен, лучше ли начинать с домашней страницы, на которую я ссылался выше, или проекта CodePlex.

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

Powershell фактически делает почти все это, если я правильно понимаю, что вы говорите.

Посмотрите этот ответ о том, как построить "двигатель отражения".

Все, что вам нужно сделать, это добавить этот набор машин в ваш набор доступных библиотек времени выполнения, и он, я думаю, будет делать то, что вы хотите. (Это может быть не так просто, как я это озвучил на практике).

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

Другие вопросы по тегам