Die Signatur ist ja gerade ist ja gerade dafür da die Funktion wiederzufinden OBWOHL die Adresse sich geändert hat.
Im Anhang ist ein Bild von einer Exe in einem Disassembler. Links siehst du rot Umrandet die ersten paar Befehle der Funktion die du finden willst (deren Signatur du willst). Auf der rechten Seite in der Hex-Ansicht siehst du die binäre Darstellung (als Hexwerte) dieser Befehle. Du kopierst dir die ersten x Bytes und schaust ob diese Bytereihenfolge mehr als einmal (also noch an anderen Stellen) vorkommt. Falls ja, musst du die Signatur solange vergrößern bis sie eindeutig ist.
In deinem Programm suchst du nun nach genau dieser Bytefolge (das ist jetzt die aus dem Beispiel, du musst natürlich deine Signatur benutzen):
Zitat:
56 33 F6 57 8B 3D 24 C2 5B 00 C7 05 48 86 5F 00 74 C6 5D 00 39 35 50 86 5F 00 76 1B
Da sich zumindest für far-jumps/calls/etc die Adressen ändern können musst du diese Bytes ignorieren.
Dadurch ergibt sich in meinem Fall folgendes Muster:
Zitat:
56 33 F6 57 8B 3D ** ** ** ** C7 05 ** ** ** ** ** ** ** ** 39 35 ** ** ** ** 76 1B
** bedeutet in dem Fall dass diese Bytes bei der Suche nach der Signatur ignoriert werden.
Du solltest jetzt nochmal sichergehen dass die Signatur trotz der "Don't care"-Bytes immernoch eindeutig ist!
Edit: Ich glaube ich hab dich ein bisschen falsch verstanden. Du suchst keine Funktion sondern einen einzelnen Variablenwert. Du kannst mit GetModuleHandle(nil) die Startadresse deines Prozesses herausfinden. Ggf. musst du dann die Basisadresse des Spiels per
DLL-Injection herausfinden.