Я пытаюсь прочитать значение из адреса указателя + смещение и не получаю правильного результата.
У меня есть следующие (соответствующие фрагменты) кода:
uintptr_t moduleBase = GetModuleBaseAddress(procId, L"ProgramImReading.exe");
uintptr_t pObjectManager = moduleBase + 0x237CB28;
std::vector<unsigned int> countOffset = { 0x20 };
uintptr_t totalObjects = FindDMAAddy(hProcess, pObjectManager, countOffset);
std::cout << "Current objects = " << totalObjects << std::endl;
НайтиDMAAddy:
uintptr_t FindDMAAddy(HANDLE hProc, uintptr_t ptr, std::vector<unsigned int> offsets)
{
uintptr_t addr = ptr;
for (unsigned int i = 0; i < offsets.size(); ++i)
{
ReadProcessMemory(hProc, (BYTE*)addr, &addr, sizeof(addr), 0);
addr += offsets[i];
}
return addr;
}
По какой-то причине это не сработает. Я могу подтвердить правильность адресов, открыв чит-движок и введя GameAdress + Pointer, затем установив смещение + 20 и получив правильное значение.
Когда я запускаю код выше, я получаю длинное случайное значение «2596411228208».
Я также могу найти текущий динамический адрес, на который указывает указатель, и прочитать прямо с этого адреса, но когда я пытаюсь прочитать с указателя + смещения, это не работает правильно.
int
,double
,...
? - person R Sahu   schedule 09.01.202020
или0x20
байта? Возможно, вы их перепутали. Вопрос говорит20
, но код говорит0x20
. - person François Andrieux   schedule 09.01.2020addr += offsets[i];
-- Что вы ожидаете от этого? Продвинутьaddr
только наoffsets[i]
байт? Если да, то не будет этого делать. - person PaulMcKenzie   schedule 09.01.2020main()
и по крайней мере одна функция#include
. Пожалуйста, отредактируйте свой код, чтобы он был минимально воспроизводимый пример вашей проблемы (включая все необходимые входные данные, но желательно без них), то мы можем попытаться воспроизвести и решить ее. Вы также должны прочитать Как спросить. - person Toby Speight   schedule 09.01.2020