Created by
[GH]Rake
|
uintptr_t EvaluatePointer(HANDLE hProcHandle, uintptr_t pointer, size_t numOffsets, uintptr_t offsets[])
{
//std::cout << "BaseAddress : 0x" << std::hex << pointer << std::endl << std::endl;
//Dereference pointer by reading the value of the pointer
if (!ReadProcessMemory(hProcHandle, (LPCVOID)pointer, &pointer, sizeof(pointer), nullptr))
{
return 0; //if RPM fails
}
//For each offset
for (size_t i = 0; i < numOffsets; i++)
{
//std::cout << "Points to : 0x" << std::hex << pointer << std::endl << std::endl;
//std::cout << "+offset 0x" << std::hex << offsets[i] << " : 0x" << std::hex << pointer + offsets[i] << std::endl << std::endl;
//Add offset and dereference that address
if (!ReadProcessMemory(hProcHandle, (LPVOID)(pointer + offsets[i]), &pointer, sizeof(pointer), nullptr))
{
return 0; //if RPM fails
}
}
//std::cout << "Final Address : 0x" << std::hex << pointer << std::endl << std::endl;
//int value;
//ReadProcessMemory(hProcHandle, (void*)pointer, &value, sizeof(value), NULL);
//std::cout << "Final Value : 0x" << std::hex << value << " or decimal " << std::dec << value << std::endl << std::endl;
return pointer; //return address pointed to by pointer
}
uintptr_t EvaluatePointerVA(HANDLE hProcHandle, uintptr_t pointer, size_t numOffsets, ...)
{
va_list args; //create argument list to store arguments
va_start(args, numOffsets); //populate argument "args" with all arguments after numOffsets
//std::cout << "BaseAddress : 0x" << std::hex << pointer << std::endl << std::endl;
//Dereference pointer by reading the value of the pointer
if (!ReadProcessMemory(hProcHandle, (LPCVOID)pointer, &pointer, sizeof(pointer), NULL))
{
return 0; //if RPM fails
}
//For each offset
for (size_t i = 0; i < numOffsets; i++)
{
uintptr_t offset = va_arg(args, uintptr_t);
//std::cout << "Points to : 0x" << std::hex << pointer << std::endl << std::endl;
//std::cout << "+offset 0x" << std::hex << offset << " : 0x" << std::hex << pointer + offset << std::endl << std::endl;
//Add offset and dereference that address
if (!ReadProcessMemory(hProcHandle, (LPVOID)(pointer + offset), &pointer, sizeof(pointer), nullptr))
{
return 0;//if RPM fails
}
}
//std::cout << "Final Address : 0x" << std::hex << pointer << std::endl << std::endl;
//int value;
//ReadProcessMemory(hProcHandle, (void*)pointer, &value, sizeof(value), NULL);
//std::cout << "Final Value : 0x" << std::hex << value << " or decimal " << std::dec << value << std::endl << std::endl;
va_end(args); //cleanup after va_list
return pointer; //return address pointed to by pointer
}
|