У меня нет даже вопроса, я думаю, что это какое-то подтверждение, что я правильно понимаю предмет.
Я занимаюсь реинжинирингом, и вот что у меня есть. Допустим, мы имеем структуру/класс, который выглядит следующим образом:Указатель на массив указателей на структуры
struct {
char str[n]
int x
float a
}
И у нас есть массив этих структур в памяти процесса мы смотрим на.
Итак, у меня есть указатель на массив указателей на структуры.
И теперь, пожалуйста, поправьте меня, если я ошибаюсь. Чтобы прочитать значение x первого элемента этого массива (фактическая структура, а не указатель), я должен выполнить следующие шаги:
- Прочитайте значение, которое указывает указатель на (4 байта).
- Без каких-либо смещений читайте значение, которое ранее прочитало значения точек, а также 4 байта (это приведет меня к адресу, где начинается структура)
- Теперь мне нужно добавить смещение к этому, равное n. И прочитайте значение с адреса с шага 2 (step2result + n + 1).
Я прав? Получу ли я фактический X, который содержит первая структура? Чтобы получить значение X из второго, мне просто нужно добавить смещение в step2 (+4 байта)?
Я думаю, что я делаю это правильно, но на самом деле я не могу достичь структур из указателей. Указатель на массив на 100% прав, я бы сказал.
Спасибо за чтение, будем ждать ответов. Если вам нужна дополнительная информация, просто спросите об этом.
p.s. не получая ничего взломанного или всего, что только в образовательных целях
Дополнение:
ОК, я стараюсь упростить это, только затруднило его объяснить и понять. Теперь я попытаюсь это исправить.
Одна структура описывает параметры NPC в игре. Вся структура имеет размер 0x1200. Первые 16 байтов - это только идентификационная информация, а затем после этой информации идет строка, которая составляет 64 байта, это имя. Затем идет координата для X/Y/Z. Все после этого не имеет значения.
Это не было так трудно найти, вот скриншот, как это выглядит:
/
Так что я могу найти другие структуры только с добавлением или вычитанием 0x1200 по адресу, где начинается эта структура.
Я искал адрес, в котором начинается структура, и нашел указатель на это. Затем я просмотрел для доступов к найденному указателю и получил что-то вроде этого:
mov [eax+edx*4+00320], ecx
Тогда я искал для значения eax
и нашел указатель, который указывает на eax
Вот почему я думал, что это массив указатели.
Надеюсь, я только немного объяснил это.
Массив структур является только упаковано Структуры один за другим. У вас есть еще один уровень косвенности, чем нужно. – Jester