2009-07-09 2 views
1

Dieses Spiel, das ich für das Skripting tun verwendet eine primäre DLL, in denen unsere Skripte wir (kreativ namens „Scripts.dll“Überschreiben Funktion in einer anderen DLL ohne Änderungen an primären dll

Dieser Scripts.dll, serverseitige Schreib , lädt andere Plugins (.dlls auch)

. Frage:ich brauche eine vorhandene Funktion in Scripts.dll in, zum Beispiel außer Kraft zu setzen, um pluginA.dll, wo der eine in Scripts.dll nicht rufen Sie an

Ich hatte die Idee von vielleicht greifen die hinzufügen Ress des einen in scripts.dll und überschreiben es mit (memcpy()?) die Adresse meiner neuen Funktion.

Oh und die Funktionen sind gleich benannt.

Antwort

1

Zuerst würde ich versuchen, den Aufrufer anzupassen, um diesen spezifischen Funktionszeiger von pluginA.dll und nicht von scripts.dll durch GetProcAddress zu bekommen.

Wenn das nicht machbar ist, würde ich den Anfang der alten Funktion mit einer Sprunganweisung zu der neuen Funktion überschreiben. Die Sprunganweisung auf x86 ist "E9 XX XX XX XX"; Beachten Sie, dass die Zieladresse nach dem Sprung relativ zum PC ist. Wenn Sie kein x86 haben, wird der Maschinencode natürlich anders aussehen.

2

Dies ist ein ziemlich großes Thema, das eine langatmige Antwort erfordert, aber zum Glück wurde es an anderer Stelle im Detail behandelt. This CodeProject article ist eine ziemlich anständige Lesung zu dem Thema - es erklärt sowohl die Theorie, und wie man die bequeme Microsoft Detours-Bibliothek, um dies sehr einfach zu tun.

+0

Danke, das sollte mir helfen. :) – Zack