da bei vielen hacks klassen methoden gecalled werden müssen und das meistens so in die richtung aussieht:
und das meiner meinung nach doch recht unübersichtlicht ist arbeite ich lieber auf folgende weise:
an sich recht simpel:
stack pointer und base pointer zurücksetzen, zur eigentlichen funktion springen :)
kleines anwendungs beispiel
so würden in etwa die klassen aussehen, wie man sie ingame verwenden kann!
die richtige verwendung sieht etwa so aus:
wie schon gesagt, meiner meinung nach schöner und übersichtlicher :)
da es sich hier nicht um ein anfänger tutorial handelt, gibts nicht mehr zu sagen :)
das verständnis für klassen und asm sollte einfach da sein!
edit: natürlich ist es bei diesem macro wichtig, ihn NUR in class wrappern zu verwenden!
da wie im unteren post schon erwähnt, jmp direkt an die adresse springt!
Code:
mov ecx, 0x13371337 mov eax, 0x13371337 call eax
Code:
#define CLASSCALL(addr) \ // macro definieren
__asm { mov esp, ebp } \ // stack wieder herstellen
__asm { pop ebp } \ // base pointer wieder herstellen
__asm { mov eax, addr } \ // die adresse in eax schieben
__asm { jmp eax } // an die adresse springen
stack pointer und base pointer zurücksetzen, zur eigentlichen funktion springen :)
kleines anwendungs beispiel
Code:
class CItem
{
public:
CItem() { CLASSCALL(0x13371337); }; // 0x13371337 ist hier die adresse zum echten constructor im game!
~CItem() { CLASSCALL(0x13371337); }; // das gleiche wie oben, nur dass es hier um den destructor geht!
void SetPosition(float x, float y, float z) { CLASSCALL(0x13371337); }; // hier wird die SetPosition methode gecalled :)
};
die richtige verwendung sieht etwa so aus:
Code:
void Hack(uint32_t itemptr)
{
CItem* item=(CItem*)itemptr; // class pointer, kommt mir nich mit c++ casts! :p
// wenn ihr die player position habt, könnte man items zum player bewegen
// in dem fall wird nur das item an 0,0,0 bewegt :)
item->SetPosition(0.0f,0.0f,0.0f);
}
da es sich hier nicht um ein anfänger tutorial handelt, gibts nicht mehr zu sagen :)
das verständnis für klassen und asm sollte einfach da sein!
edit: natürlich ist es bei diesem macro wichtig, ihn NUR in class wrappern zu verwenden!
da wie im unteren post schon erwähnt, jmp direkt an die adresse springt!