Достаточно часто я вижу, что люди на разных форумах под словом оффсет подразумевают одиночное смещение.
Пример:
namespace offset
{
constexpr auto uWorld = 0x8924E28;
constexpr auto gNames = 0x8717A00;
constexpr auto gObjects = 0x87B7100;
namespace World
{
constexpr auto persistentLevel = 0x30;
constexpr auto owningGamingInstance = 0x1B8;
constexpr auto gameState = 0x158;
}
namespace PersistentLevel
{
constexpr auto ActorArray = 0x098;
constexpr auto ActorCount = 0x0A0;
}
namespace Actor
{
constexpr auto GetPawn = 0x180;
constexpr auto GetRootComponent = 0x198;
}
namespace GetRootComponent
{
constexpr auto RelativeLocation = 0x128;
constexpr auto RelativeRotation = 0x140;
}
namespace OwningGamingInstance
{
constexpr auto localPlayers = 0x038;
}
namespace LocalPlayer
{
constexpr auto PlayerController = 0x30;
}
namespace PlayerController
{
constexpr auto PlayerState = 0x298;
constexpr auto AcknowledgedPawn = 0x338;
constexpr auto PlayerCameraManager = 0x348;
}
namespace PlayerState
{
constexpr auto PlayerId = 0x294;
constexpr auto PlayerName = 0x338;
}
}
Тут явно видно, что, например, по смещению 338
находится начало данных, в которых содержится имя игрока, это ясно.
Но когда я, например, сам ищу некоторые данные, (допустим ХП) в cheat engine, то я получаю что то вроде "GameTitle.exe" + 0x08923568
со смещениями (в абсолютном большинстве случаев - несколькими) по типу
2E8
--> 30
--> C8
--> 410
Но это явно больше, чем 1 смещение относительно базового .exe
адреса.
В коде для получения доступа к переменной я использую вектор с оффсетами:
std::vector<DWORD> offsets { 0x2E8, 0x30, 0xC8, 0x410 };
Но меня всё же интересует, как получить то самое одиночное смещение относительно .exe
, чтобы не прыгать по этим смещениям.