Hi.
Hab gerade mal wieder Freude am herausfinden von Adressen bekommen und bin deshalb wieder am gleichen Problem, vor dem ich damals stand und weswegen ich damit schleunigst wieder aufgehört habe.
Ich erkläre das ganze mal an einem Beispiel.
1. Wir haben ein Spiel, welches eine Klasse für Spieler enthält:
PHP-Code:
class CPlayer
{
public:
CPlayer(const char *pszName);
void spawn(void);
// ...
private:
const char *m_pszName;
int m_iHealth;
Weapon m_Weapon;
Vector m_vecPosition;
};
2. Wir gehen davon aus, dass 10 Spieler im Spiel sind, denmach gibt es 10 Instanzen der Klasse CPlayer
3. Wir finden die Adresse der Lebenspunke (Health) heraus (für mich selber und alle anderen Spieler)
4. Jetzt müssten wir die Basis der untersten (ersten) Instanz herausfinden
5. Dann noch herausfinden wie groß die Spielerklasse ist (ist ja nicht bekannt, dass da oben ist nur eine Annahme)
6. Wenn man alles das zusammen hat, kann man loslegen
So - ab Punkt 4 geht es für mich los, dass ich nicht mehr weiterkomme. Wie zum Teufel komm ich auf Größe der Spielerklasse und wie finde ich heraus, wo die erste Instanz beginnt?
Wenn man alles zusammen hat, kann man eigentlich ganz einfach fortfahren, richtig?
PHP-Code:
unsigned long nBase = 0x00002000; // natürlich Schwachsinn
unsigned int iSize = 0x7; // stimmt das überhaupt so? Meine Annahme: Klasse + 2 Funktionen + 4 Member
unsigned int iNameOffset = 0x3;
unsigned int iHealthOffset = 0x4;
unsigned int iPlayers = 10;
for (unsigned int i = 0; i < iPlayers; i++)
{
unsigned long nAddress = nBase + i * iSize;
cout << *((const char*)(nAdresse + iNameOffset)) << " hat " << *((int)(nAdresse + iHealthOffset)) << " Lebenspunkt!" << endl;
}
Ich hoffe meine Annahme ist so richtig und jemand kann mir dabei helfen
Gruß