Cheat Engine и квадратные скобки с базовым адресом + оффсет

В общем такая проблема я совсем недавно начал пользоваться Cheat Engine решил написать прогу которая просто выводит значение жизней игрока для дальнейшего использования

if (baseAddress == 0) {
    ImGui::Text("Base Address not found");
}
else {
    uintptr_t offset = (baseAddress + 0x0017E0A8) + 0xEC;
    int currentValue = ReadValueByOffset<int>(processId, baseAddress, offset);
    ImGui::Text("Health %.s", currentValue);
}

не знаю как это объяснить но попытаюсь как можно понятние если посмотреть базовый адрес через чит енджин то он будет таким же как у меня, но когда я работаю с ним чтобы добавить адрес с которым я буду работать я использую квадратные скобки тоесть [ac_client.exe + 0x0017E0A8] + 0xEC если их убрать то будет не тот адрес, как работают эти самые квадратные скобки в чит енджин? если взять процесс в квадратные скобки то его адрес также будет отличаться от базового, как это работает?


Ответы (1 шт):

Автор решения: neliut

как работают эти самые квадратные скобки в чит енджин?

"ac_client.exe" -- найди первую ячейку, с которой начинается область памяти для ac_client.exe
"ac_client.exe"+0017E0A8 -- сдвинься от этой первой ячейки на 17E0A8 байтов далее.
["ac_client.exe"+0017E0A8] -- возьми содержимое того, что находится в этой ячейке, индекс который нужно вычислить внутри скобок, а потом интерпретируй это как новый адрес в памяти.
["ac_client.exe"+0017E0A8]+EC -- сдвинься от этого нового адреса ещё на EC байтов далее.
[["ac_client.exe"+0017E0A8]+EC] -- интерпретируй новое содержимое, как очередной адрес в памяти.
[[["ac_client.exe"+0017E0A8]+EC]+0] -- от очередной новой ячейки, никуда не смещаясь, используй её содержимое, как новый адрес в памяти.
[[["ac_client.exe"+0017E0A8]+EC]+0]-123... -- сдвиги могут быть и отрицательными.
Количество вложенностей не ограниченно.

→ Ссылка