Я ввел DLL в exe. Теперь мне нужно прочитать данные с определенного смещения. Мой код из DLL:DLL-инъекция и память чтения с помощью смещения
DWORD ExeBaseAddress = (DWORD)GetModuleHandleA(0);
// HANDLE baseAddr = GetModuleHandleA(0)
uint16_t value = ExeBaseAddress + 0x7198BC + 0x70e;
cout << value << endl;
Проблема это не дает мне значение я ожидаю, что является 1000
. Он также не дает мне правильный адрес.
Используя программное обеспечение для чтения памяти, я могу получить значение CORRECT. См:
Но я все еще получаю неправильное значение из кода, даже если я использую точно такой же сдвиг от чтения памяти приложения. Так что я пропущу?
Я пробовал это, но все еще давал мне неправильное значение.
HANDLE ExeBaseAddress = GetModuleHandleA(0);
uintptr_t p = (uintptr_t)ExeBaseAddress + 0x7198BC + 0x70e;
int value = *reinterpret_cast<int *>(p);
cout << ExeBaseAddress << " - " << value << endl;
Вам нужно разыменовать значение в этом месте, вы просто печатаете адрес, на котором он расположен. Кроме того, значение 'ExeBaseAddress' +' 0x7198BC' + '0x70e' будет переполняться' uint16_t' – lcs
Извините @cocarin, я не так хорош с 'C++'. Как это делается? – majidarif
http://stackoverflow.com/questions/4955198/what-does-dereferencing-a-pointer-mean содержит обзор разыменования. – lcs