Vor kurzem hörte ich den Begriff "Hook", als ich mit einigen Leuten über ein Programm sprach, das ich gerade schrieb. Ich bin mir nicht sicher, was dieser Begriff genau bedeutet, obwohl ich aus dem Gespräch schloss, dass ein Hook eine Art Funktion ist. Ich habe nach einer Definition gesucht, konnte aber keine gute Antwort finden. Könnte mir jemand eine Vorstellung davon geben, was dieser Begriff im Allgemeinen bedeutet, und vielleicht ein kleines Beispiel zur Veranschaulichung der Definition nennen?
Antworten
Zu viele Anzeigen?Oftmals bezieht sich das Hooking auf Win32-Nachrichten-Hooking oder die Linux/OSX-Äquivalente, aber allgemeiner ausgedrückt ist Hooking einfach die Benachrichtigung eines anderen Objekts/Fensters/Programms/etc, dass Sie benachrichtigt werden wollen, wenn eine bestimmte Aktion stattfindet. Zum Beispiel: Alle Fenster auf dem System benachrichtigen Sie, wenn sie geschlossen werden sollen.
Im Allgemeinen ist das Hooking etwas gefährlich, da es zu Instabilität oder zumindest zu unerwartetem Verhalten führen kann, wenn man nicht versteht, wie es das System beeinflusst. Unter bestimmten Umständen kann es aber auch SEHR nützlich sein. Zum Beispiel: FRAPS verwendet es, um zu bestimmen, in welchem Fenster es den FPS-Zähler anzeigen soll.
Eine Hakenkette ist eine Reihe von Funktionen, in der jede Funktion die nächste aufruft. Das Besondere an einer Kette von Hooks ist, dass der Programmierer zur Laufzeit eine weitere Funktion zur Kette hinzufügen kann. Eine Möglichkeit, dies zu tun, besteht darin, nach einem bekannten Ort zu suchen, an dem die Adresse der ersten Funktion in einer Kette gespeichert ist. Sie speichern dann den Wert dieses Funktionszeigers und überschreiben den Wert an der Anfangsadresse mit der Adresse der Funktion, die Sie in die Hook-Kette einfügen möchten. Die Funktion wird dann aufgerufen, erledigt ihre Aufgabe und ruft die nächste Funktion in der Kette auf (sofern Sie nicht anders entscheiden). Natürlich gibt es noch eine Reihe anderer Möglichkeiten, eine Kette von Hooks zu erstellen, vom direkten Schreiben in den Speicher bis hin zur Verwendung der Metaprogrammiermöglichkeiten von Sprachen wie Ruby oder Python.
Ein Beispiel für eine Kette von Hooks ist die Art und Weise, wie eine MS-Windows-Anwendung Nachrichten verarbeitet. Jede Funktion in der Verarbeitungskette verarbeitet entweder eine Nachricht oder sendet sie an die nächste Funktion in der Kette.