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 шт):
как работают эти самые квадратные скобки в чит енджин?
"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...
-- сдвиги могут быть и отрицательными.
Количество вложенностей не ограниченно.