C ++ читает из класса по его указателю и смещению

Ida pro генерирует эту строку в псевдокоде, и у меня есть указатель рабочего класса и обратный инженерный класс, но я не хочу читать что-то непосредственно из файла класса.

Пример в IDA Pro:

*(_DWORD *)(v3 + 9649) = 1;

// Alignment: 1
class CVehicle
{
DWORD modelid; // 0
float pos[3]; // 4
WORD player; // 16
}

CVehicle *pVehicle;

Я знаю, если я хочу получить игрока, то мне нужно сделать это:

pVehicle->player

Но что, если я хочу получить игрока по смещению? Потому что иногда мне нужно читать по смещению, потому что я не перепроектировал полный класс. пример

*(WORD*)(pVehicle + 16) // That should work, should return player, but will crash. Why?

2

Решение

Предполагая, что я понимаю, что вы говорите в своем сообщении, вот как я это сделаю:

Заголовок:

#pragma pack(push, 1)
class CPlayer
{
public:
unsigned char Unknown00[9649];
char Unknown9649;
};

class CVehicle
{
public:
DWORD modelid; // 0
float pos[3]; // 4
CPlayer *pPlayer; // 16
};
#pragma pack(pop)

Код:

char SomethingIWant;
CVehicle *pVehicle; // set previously
CPlayer *pPlayer = nullptr;

if (pVehicle)
pPlayer = pVehicle->pPlayer;
if (pPlayer)
SomethingIWant = pPlayer->Unknown9649;

Затем, вы можете просто заполнить классы, как вы идете и узнать больше информации.

(Отказ от ответственности: приведенный выше код предполагает, что pVehicle-> pPlayer имеет значение nullptr или допустимо. В противном случае потребуется больше кода для правильной проверки того, что pPlayer действителен.)

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector