2008-11-17 14 views
11

OK, więc tytuł jest do niczego, ale nie mogłem wymyślić nic lepszego (może ktoś inny może?).Jak korzystać z odbicia, aby utworzyć "maszynę do refleksji"?

Mam tutaj kilka pytań dotyczących tematu. Chciałbym stworzyć program, który może wziąć obiekt i użyć refleksji do wyświetlenia wszystkich jego właściwości, metod, konstruktorów itd. Mogę następnie manipulować tymi obiektami w czasie wykonywania, aby przetestować, debugować i dowiedzieć się, co dokładnie z moich klas/programy działają, gdy są uruchomione (niektóre z nich będą usługami Windows i być może zainstalowanymi na komputerze, zamiast uruchamiać debugowanie z VS).

Pozwoliłabym więc podpiąć program, że z lokalnego komputera (tylko) ten program może pobrać instancję głównego obiektu i zobaczyć wszystkie działające w nim obiekty podrzędne. (dla bezpieczeństwa program może wymagać uruchomienia z argumentem, aby odsłonić ten hak).

"Maszyna do odbijania" umożliwiłaby manipulowanie i testowanie w czasie wykonywania.

Czy to brzmi możliwe?

Czy program musiałby dostarczyć haka, czy też "maszyna do refleksji" mogłaby pobrać EXE i (jeśli znała wszystkie klasy, z których korzystał), utworzyć obiekt do użycia?

Wiem, że można importować biblioteki DLL w środowisku wykonawczym, aby wiedział o wszystkich klasach, ale czy można importować poszczególne klasy? TO ZNACZY. Powiedzmy, że mam projekt "Y", który nie jest skompilowany do biblioteki DLL, ale chcę użyć "maszyny do refleksji", czy mogę wskazać ten katalog i pobrać pliki, aby móc odnieść się do tych klas?

EDYCJA: Chciałbym spróbować i rozwijać to samodzielnie, ale mam już długą listę projektów, które chciałbym zrobić i już się zaczęły. Po co wymyślać nowe koło, gdy jest już duży wybór do wyboru.

+0

Nie wiem, dlaczego to pytanie zostało odrzucone. To wydaje się interesujący pomysł. Wcześniej głosowano. –

Odpowiedz

5

Spróbuj spojrzeć na Crack.NET. Używa się go do manipulowania runtime i zapytaniami na WPF/WinForm, ale źródło jest dostępne i może być dobrym początkiem, jeśli już nie spełnia twoich potrzeb.

+0

Kocham Crack.Net, wygląda na niegodziwego. To będzie używane w środowisku pracy, a my nie mamy 3.5 na maszynach ani nie mamy ironpythona (nie są oni fanami wprowadzania dodatkowych bitów, kiedy nie muszą). – Jon

1

Powershell faktycznie robi prawie wszystko, jeśli dobrze rozumiem, co mówisz.

+0

Powershell wygląda interesująco i jest warty odkrycia. – Jon

3

Wygląda na to, że Corneliu Tusnea Hawkeye może znajdować się blisko poszukiwanego zapytania w czasie wykonywania obiektów/właściwości/itd. Nazwał go edytorem obiektów środowiska .NET Runtime. Nie jestem pewien, czy strona główna, do której linkowałem powyżej, czy CodePlex project jest najlepszym miejscem do rozpoczęcia.

Jest nieco przestarzały, ale jest tam earlier version of it on CodeProject, gdzie można zobaczyć kod źródłowy tego, jak i co zrobił.

+0

Hawkeye wygląda świetnie i może być idealny. – Jon

+0

Czy Hawkeye można używać w aplikacjach wiersza poleceń. Szybko się z tym uporałem i wydaje mi się, że mogę tylko podpiąć się do okien z aplikacjami. – Jon

+0

Nie korzystałem z niego w znacznym stopniu, ale uważam, że masz rację, że nie można go podłączyć do aplikacji konsolowych. –

0

Zobacz tę odpowiedź, w jaki sposób zbudować "reflection engine".

Wszystko, co musisz zrobić, to spadnie ten zestaw maszyn w swoim zestawie dostępnych bibliotek uruchomieniowych i robi to co chcesz, tak myślę. (To może nie być tak proste, jak sprawiło, że brzmi to w praktyce).

Domyślam się, że będziesz także potrzebować kompilatora środowiska wykonawczego, abyś mógł wytwarzać oprzyrządowane/przekształcone warianty programu pod kontrolą w celu zebrania żądanych danych środowiska wykonawczego. Może się okazać, że takie maszyny dostarczają wyniki analizy statycznej, które pozwalają uniknąć w wielu przypadkach analizy wykonawczej.

Powiązane problemy