2013-07-18 13 views
5

Powiedzmy, że chcę, aby moi klienci dali możliwość tworzenia wtyczek do swoich aplikacji, ale nie chcę, aby były to hacki, które kłują się pamięcią mojego programu, czy można temu zapobiec?Czy można ograniczyć funkcjonalność DLL?

Lub załadować bibliotekę DLL w pewien rodzaj regionu pamięci, w którym nie będzie miał dostępu do głównej pamięci programu?

Odpowiedz

4

Możesz pozwolić, aby wtyczki działały w oddzielnym procesie. Każda informacja wymagana przez wtyczkę jest przekazywana jako wiadomość do tego procesu. Każdy wynik, który jest wymagany przez aplikację, jest odbierany jako wiadomość. Możesz mieć oddzielny proces na jedną wtyczkę lub możesz uruchomić wszystkie wtyczki w tym samym procesie.

Na marginesie, większość nowoczesnych wersji funkcji wtyczki korzysta z osadzonego środowiska wykonawczego, takiego jak JVM. Następnie wtyczka działa w tym samym procesie co aplikacja, ale w ramach wirtualnego środowiska, które skutecznie ogranicza spustoszenie wtyczka może zepsuć się na twoim programie. W tym scenariuszu nie ma biblioteki DLL, ale kod skryptu lub kod bajtowy.

1

Krótka odpowiedź to "nie".

Długa odpowiedź: DLL jest ładowany do pamięci i wydaje się być częścią samego pliku wykonywalnego dla wszystkich celów i celów, zarówno z perspektywy procesu, jak iz perspektywy systemu operacyjnego. Oczywiście DLL jest (być może) dzielony między wiele plików wykonywalnych, więc system operacyjny musi śledzić, ile "użytkowników" istnieje określonej biblioteki DLL, ale z perspektywy jednego procesu jest częścią pliku wykonywalnego. Jest to osobny zakres adresów, ale prawa i uprawnienia dotyczące zawartości biblioteki DLL są dokładnie takie same, jak w przypadku innych bibliotek DLL lub samych głównych dostępnych opcji.

Jeśli masz wtyczki, musisz ZAUFAĆ wtyczki. Jeśli tego nie chcesz, nie używaj modelu DLL do tworzenia wtyczek (np. Użyj współdzielonego obszaru pamięci i innego pliku wykonywalnego, aby zezwolić na dostęp tylko do pamięci współużytkowanej).

Powiązane problemy