Niedawno usłyszałem termin „hak” podczas rozmowy z niektórymi ludźmi na temat programu, który piszę. Nie jestem pewien, co dokładnie oznacza ten termin, chociaż z rozmowy wywnioskowałem, że hak jest rodzajem funkcji. Szukałem definicji, ale nie mogłem znaleźć dobrej odpowiedzi. Czy ktoś byłby w stanie dać mi wyobrażenie o tym, co ogólnie oznacza ten termin i być może mały przykład ilustrujący definicję?
248
Odpowiedzi:
Zasadniczo jest to miejsce w kodzie, które pozwala podłączyć się do modułu, aby zapewnić inne zachowanie lub zareagować, gdy coś się wydarzy.
źródło
Hak to funkcjonalność zapewniana przez oprogramowanie dla użytkowników tego oprogramowania w celu wywołania własnego kodu w określonych okolicznościach. Ten kod może rozszerzyć lub zastąpić obecny kod.
W dawnych czasach, gdy komputery były naprawdę osobiste, a wirusy były mniej rozpowszechnione (mówię o latach 80.), wystarczyło załatać oprogramowanie systemu operacyjnego, aby wywołać twój kod. Pamiętam, jak napisałem rozszerzenie do języka Applesoft BASIC na Apple II, które po prostu podłączyło mój kod do interpretera BASIC, wstrzykując wywołanie do mojego kodu przed przetworzeniem dowolnego wiersza.
Niektóre komputery miały wstępnie zaprojektowane zaczepy, jednym z przykładów jest strumień we / wy w Apple II. Użył takiego haka do wstrzyknięcia całego podsystemu dyskowego (ROMy Apple II ROM zostały pierwotnie zbudowane w czasach, w których kasety były podstawowym nośnikiem pamięci dla komputerów PC). Kontrolowałeś dyski, drukując kod ASCII 4 (
CTRL-D
), a następnie polecenie, które chcesz wykonać, a następnie aCR
, i został on przechwycony przez podsystem dyskowy, który podłączył się do procedur drukowania Apple ROM.Na przykład linie:
wyświetli zawartość dysku, a następnie ponownie zainicjuje maszynę. Pozwoliło to na takie sztuczki, jak ochrona programów BASIC poprzez ustawienie pierwszego wiersza jako:
następnie używając,
POKE
aby wstawićCTRL-D
znak tam, gdzieX
był. Następnie każdy, kto spróbuje podać źródło, wyśle sekwencję ponownej inicjalizacji poprzez procedury wyjściowe, w których podsystem dyskowy ją wykryje.Jest to często rodzaj oszustwa, do którego musimy się zastosować, aby uzyskać pożądane zachowanie.
W dzisiejszych czasach, z bardziej bezpiecznym systemem operacyjnym, zapewnia on możliwości haków, ponieważ nie należy już modyfikować systemu operacyjnego „w locie” ani na dysku.
Byli już od dłuższego czasu. Miały je komputery mainframe (zwane wyjściami), a duża część oprogramowania mainframe korzysta z tych udogodnień nawet teraz. Na przykład darmowy system kontroli kodu źródłowego dostarczany z systemem z / OS (zwany SCLM) pozwala całkowicie zastąpić podsystem bezpieczeństwa, po prostu umieszczając własny kod w wyjściu.
źródło
W ogólnym ujęciu „hak” to coś, co pozwala programistowi przeglądać i / lub wchodzić w interakcje i / lub zmieniać coś, co już dzieje się w systemie / programie.
Na przykład Drupal CMS zapewnia programistom zaczepy, które pozwalają im podjąć dodatkowe działania po utworzeniu „węzła treści”. Jeśli programista nie wdroży haka, węzeł jest tworzony zgodnie z normalnym. Jeśli programista wdroży hak, może uruchomić jakiś dodatkowy kod przy każdym utworzeniu węzła. Ten kod może zrobić wszystko, w tym wycofać i / lub zmienić oryginalne działanie. Może również zrobić coś zupełnie niezwiązanego z tworzeniem węzła.
Oddzwonienie można uznać za specyficzny rodzaj haka. Wdrażając funkcję oddzwaniania w systemie, system ten pozwala na wywołanie dodatkowego kodu po zakończeniu akcji. Jednak przechwytywanie (jako ogólny termin) nie ogranicza się do wywołań zwrotnych.
Inny przykład. Czasami programiści będą odnosić się do nazw klas i / lub identyfikatorów elementów jako haczyków. Dzieje się tak, ponieważ umieszczając identyfikator / nazwę klasy na elemencie, mogą następnie użyć Javascript do modyfikacji tego elementu lub „zaczepić się” w dokumencie strony. (to rozszerza znaczenie, ale jest powszechnie używane i warte wspomnienia)
źródło
Simple powiedział:
Hak to sposób wykonania niestandardowego kodu (funkcji) przed, po lub zamiast istniejącego kodu. Na przykład można napisać funkcję „zaczepiającą” się w procesie logowania w celu wykonania funkcji Captcha przed kontynuowaniem normalnego procesu logowania.
źródło
Przechwytywanie w programowaniu jest techniką wykorzystującą tak zwane haki do tworzenia łańcucha procedur jako procedury obsługi zdarzeń.
źródło
Haki to kategoria funkcji, która umożliwia kodowi bazowemu wywoływanie kodu rozszerzenia. Może to być przydatne w sytuacjach, w których główny programista chce zaoferować rozszerzalność bez ujawniania swojego kodu.
Jednym z zastosowań hooków jest rozwój modów gier wideo. Gra może nie zezwalać twórcom modów na rozszerzanie podstawowej funkcjonalności, ale haczyki mogą być dodawane przez twórców podstawowych bibliotek modów. Dzięki tym haczykom niezależni programiści mogą wywoływać niestandardowy kod dowolnego pożądanego zdarzenia, takiego jak ładowanie gry, aktualizacje ekwipunku, interakcje jednostek itp.
Częstą metodą implementacji jest nadanie funkcji pustej listy wywołań zwrotnych, a następnie udostępnienie możliwości rozszerzenia listy wywołań zwrotnych. Kod podstawowy zawsze wywołuje funkcję w tym samym czasie i we właściwym czasie, ale przy pustej liście wywołań zwrotnych funkcja nic nie robi. To jest z założenia.
Osoba trzecia ma zatem możliwość napisania dodatkowego kodu i dodania nowego połączenia zwrotnego do listy połączeń zwrotnych haka. Posiadając jedynie odniesienie do dostępnych haczyków, mają one rozszerzoną funkcjonalność przy minimalnym ryzyku dla systemu podstawowego.
Haki nie pozwalają programistom robić niczego, czego nie można zrobić z innymi strukturami i interfejsami. Można je wybrać z uwzględnieniem zadania i użytkowników (niezależni programiści).
Dla wyjaśnienia: hak pozwala na przedłużenie i może być zaimplementowany za pomocą wywołań zwrotnych. Oddzwanianie to na ogół tylko wskaźnik funkcji; obliczony adres funkcji. Wydaje się, że istnieją pomieszania w innych odpowiedziach / komentarzach.
źródło
Hak oznacza miejsce w kodzie, w którym wywołujesz zdarzenie określonego typu, a jeśli to zdarzenie zostało wcześniej zarejestrowane z odpowiednią funkcją do oddzwonienia, wówczas byłoby obsługiwane przez tę zarejestrowaną funkcję, w przeciwnym razie nic się nie stanie.
źródło
haki można wykonać, gdy wystąpi jakiś warunek. np. niektóre zmiany zmiennych lub jakieś działanie jest wywoływane lub zdarza się jakieś zdarzenie. haki mogą wchodzić w proces i zmieniać rzeczy lub reagować na zmiany.
źródło
Często przechwytywanie odnosi się do przechwytywania komunikatów Win32 lub odpowiedników Linux / OSX, ale bardziej ogólnie zaczepianie to po prostu powiadamianie innego obiektu / okna / programu / itp., Że chcesz zostać powiadomiony, gdy nastąpi określone działanie. Na przykład: posiadanie wszystkich okien w systemie powiadamia o zbliżającym się zamknięciu.
Zasadniczo zaczepianie jest nieco niebezpieczne, ponieważ wykonywanie go bez zrozumienia, jak wpływa na system, może prowadzić do niestabilności lub bardzo nieoczekiwanego zachowania. Pomysł może być BARDZO przydatny w pewnych okolicznościach. Na przykład: FRAPS używa go do określania, w których oknach powinien pokazywać licznik FPS.
źródło
Łańcuch haków to zestaw funkcji, w których każda funkcja wywołuje następną. Istotne w łańcuchu haków jest to, że programista może dodać kolejną funkcję do łańcucha w czasie wykonywania. Jednym ze sposobów na to jest poszukiwanie znanej lokalizacji, w której przechowywany jest adres pierwszej funkcji w łańcuchu. Następnie zapisujesz wartość tego wskaźnika funkcji i zastępujesz wartość pod adresem początkowym adresem funkcji, którą chcesz wstawić do łańcucha zaczepu. Następnie funkcja jest wywoływana, wykonuje swoją działalność i wywołuje następną funkcję w łańcuchu (chyba że zdecydujesz inaczej). Oczywiście istnieje wiele innych sposobów tworzenia łańcucha haczyków, od pisania bezpośrednio do pamięci po korzystanie z funkcji metaprogramowania w językach takich jak Ruby lub Python.
Przykładem łańcucha haków jest sposób, w jaki aplikacja MS Windows przetwarza wiadomości. Każda funkcja w łańcuchu przetwarzania albo przetwarza wiadomość lub wysyła ją do następnej funkcji w łańcuchu.
źródło
W systemie zarządzania treścią Drupal „hook” ma względnie konkretne znaczenie. Gdy wystąpi zdarzenie wewnętrzne (na przykład tworzenie treści lub logowanie użytkownika), moduły mogą reagować na zdarzenie, implementując specjalną funkcję „przechwytywania”. Odbywa się to za pomocą konwencji nazewnictwa - na przykład [nazwa wtyczki] _user_login () dla zdarzenia logowania użytkownika.
Z powodu tej konwencji zdarzenia bazowe są nazywane „hakami” i występują w nazwach takich jak „hook_user_login” i „hook_user_authenticate ()” w dokumentacji API Drupala.
źródło
Krótko mówiąc, możesz zmienić kod wywołania API, na przykład,
MessageBox
gdzie wykonuje inną funkcję edytowaną przez ciebie (globalnie będzie działać w całym systemie, lokalnie w całym procesie).źródło