Es gab mal eine Windows Version, bei der die Lizenz.Key's nicht mehr ausgereicht haben, und Microsoft sein Produkt neu kompilieren musste, um dann auf "neue"Consumer Key's zuzuführen.
Das muss dann aber schon Ewigkeiten her sein.
Das RPC Protokoll anfürsich nutzt ja für die Übergabe nur eine 32-Bit Nummer zu jeder Methode, die einmal auf den Server, und einmal am Client stimmen muss.
Es gibt viele RPC Protokolle und diese Form der Übermittlung ist eher unüblich. Meistens wird eher ein Name oder (z.B. bei REST) eine
URL verwendet.
Ich fachsimple mal, das die interne Datenbank von Windows in den Registrierung oder einer versteckten Datei gespeichert werden, und bei jedem "neuen" Setup eines Programmes geändert bzw. neu verteilt werden.
Der Windows-Loader - egal jetzt ob
DLL oder EXE, der setzt ja auch intern immer neue Offset's zusammen. Und wenn dann der Computer aus und ein-geschaltet wird, werden dann die neue Offset verwendet.
Somit leuchtet es mir auch ein, das nach (fast) jeden neuen Setup/Install einer Komponente der Computer neu gestartet werden muss...
Du stellst dir das glaube ich falsch vor. Die Offsets kommen schlicht dadurch zustande, dass z.B. Objektreferenzen in Delphi an einer bestimmten Speicherstelle liegen. Von dort aus wird dann grob gesagt das Klassengerüst drübergestülpt um die echten Adressen zu ermitteln. Wenn z.B. ein Feld 50 Byte nach dem Beginn der Klasse liegt, werden diese 50 Byte zu der Adresse hinzugezählt, an der die Objektreferenz liegt.
Genauso werden DLLs in den Speicher geladen und liegen dann an einer bestimmten Stelle im Speicher. Genauso kann man von dort aus dann die relativen Speicheradressen der Funktionen über die Ladeadresse in absolute Adressen umwandeln.
Im Detail steckt da noch einiges mehr dahinter, z.B. die Virtual Method Table usw., aber als grob vereinfachte Datstellung sollte das reichen.
Es gibt keine interne Datenbank oder so, sondern in den DLLs sind Offsets zu den einzelnen Methoden gespeichert. In Kombination mit der Adresse der
DLL im Speicher bekommt man dann die absolute Adresse. Die Offsets sind in den DLLs pro Version fest und ändern sich nur ggf. bei einer neuen Version der
DLL. Die echte Speicheradresse wird jeweils dynamisch ermittelt.
Ich sehe allerdings nicht, was das mit dem Thema zu tun hat und worauf du eigentlich hinaus willst.