Stack verschoben
-
Hallo,
ich weiß nicht ob das hier richtig ist, wenn nicht bitte verschieben.Ich möchte ein Spiel modifizieren und habe dazu eine Filter-DLL erstellt.
Mein Problem hierbei ist, dass ich MinGW verwende und das Spiel vermutlich mit MSVC kompiliert wurde und die "Auffassung" von __thiscall hier anscheinend unterschiedlich ist.Also, ich hab hier folgende Klasse die als "Hook" für die des Spiels dient:
class oCNpc { public: void SetAttribute(int,int) { asm("MOV ECX, EAX"); asm("MOV EAX, 0x68D840"); asm("JMP EAX"); } };Ich hab hier mal Screenshots von Zielfunktion und Stack gemacht (aus IDA), damit ihr euch ein Bild davon machen könnt:
http://img172.imageshack.us/my.php?image=functionur2.png
http://img246.imageshack.us/my.php?image=stackfo0.pngVielen Dank im Voraus!

-
override schrieb:
...Ich möchte ein Spiel modifizieren und habe dazu eine Filter-DLL erstellt...
Grundsätzlich solltest du den rechtlichen Rahmen berücksichtigen (Modifizieren ist zumeist verboten).
override schrieb:
Mein Problem hierbei ist, dass ich MinGW verwende und das Spiel vermutlich mit MSVC kompiliert wurde und die "Auffassung" von __thiscall hier anscheinend unterschiedlich ist.
Klassen kannst du grundsätzlich nicht über DLL- und Compilergrenzen hinweg importieren/exportieren.
cu André
-
Hallo
Laut den Screenshots glaube ich nicht das es ein __thiscall ist.
Es sieht aus wie __classcall.Der Zeiger auf die Klasse kommt mit ECX, die Parameter sind am Stack,
und der Stack wird von der Funktion selber aufgeräumt.
-
asc schrieb:
Grundsätzlich solltest du den rechtlichen Rahmen berücksichtigen (Modifizieren ist zumeist verboten).
Der Rechteinhaber weiß bescheid und hat nichts dagegen.

Ansonsten bewegt sich das ganze hierzulande in einer rechtlichen Grauzone.asc schrieb:
Klassen kannst du grundsätzlich nicht über DLL- und Compilergrenzen hinweg importieren/exportieren.
Natürlich nicht, deswegen mache ich mir ja die Mühe und rekonsturiere sie, was an sich ja bisher gut funktioniert hat - vor diesem Compiler.
AZ schrieb:
Laut den Screenshots glaube ich nicht das es ein __thiscall ist.
Es sieht aus wie __classcall.Also __classcall kenn ich gar nicht, ich ging nur davon aus das es __thiscall ist, weil IDA es sagt (s. Screenshot).
Haltet ihr das Verhalten also normal, das die Parameter um 8 Bytes auf dem Stack verschoben sind und lässt sich bei Klassen die Aufrufkonvention überhaupt effektiv ändern?
-
asc schrieb:
override schrieb:
...Ich möchte ein Spiel modifizieren und habe dazu eine Filter-DLL erstellt...
Grundsätzlich solltest du den rechtlichen Rahmen berücksichtigen (Modifizieren ist zumeist verboten).
Ach was. Wer will Dir das verbieten können? Nur, weil MS das in all ihre EULAs reinschreibt heißt das noch lange nicht, dass das hierzulande Gültigkeit besitzt.
-
Konrad Rudolph schrieb:
Ach was. Wer will Dir das verbieten können? Nur, weil MS das in all ihre EULAs reinschreibt heißt das noch lange nicht, dass das hierzulande Gültigkeit besitzt.
Es gibt auch Gesetze in Deutschland die ein Programm schützen (und ich habe mich nicht auf MS bezogen, sondern allgemein um Programme an sich). Aber sofern man nur privat in seinen 4 Wänden bleibt, kümmert es in der Tat den Gesetzgeber wenig was man mit seinen gültigen Softwarelizenzen anstellt. Sobald die Modifikation aber Außenstehende betrifft, man die Modifikation weitergibt oder Schutzmechanismen umgeht, sieht das nicht mehr so aus.
cu André
-
@asc: Volle Zustimmung.
-
asc schrieb:
Grundsätzlich solltest du den rechtlichen Rahmen berücksichtigen (Modifizieren ist zumeist verboten).Der Rechteinhaber weiß bescheid und hat nichts dagegen.

Ansonsten bewegt sich das ganze hierzulande in einer rechtlichen Grauzone.hmm dann frag den rechteinhaber nach dem quell code;)