So i went ahead and whipped this up in 10 minutes, should work to however you want it to.
Code:
class CMemoryReader
{
public:
template <class T>
bool Read( DWORD dwOffset, T& TSave )
{
if ( !Un****( dwOffset, sizeof( T ) ) )
return false;
TSave = *(T*)dwOffset;
Re****( dwOffset, sizeof( T ) );
return true;
}
template <class T>
bool Write( DWORD dwOffset, T TData )
{
if ( !Un****( dwOffset, sizeof( T ) ) )
return false;
*(T*)dwOffset = TData;
Re****( dwOffset, sizeof( T ) );
return true;
}
//-----------------------------------------------------------
bool Un****( DWORD dwOffset, DWORD dwSize )
{
return VirtualProtect( (LPVOID)dwOffset, dwSize, PAGE_EXECUTE_READWRITE, &m_dwOld );
}
bool Re****( DWORD dwOffset, DWORD dwSize )
{
return VirtualProtect( (LPVOID)dwOffset, dwSize, m_dwOld, &m_dwOld );
}
private:
DWORD m_dwOld;
};
CMemoryReader MemoryReader;
DWORD dwDwordValue = NULL;
BYTE byteByteValue = 0;
MemoryReader.Read<DWORD>( 0x00411474, dwDwordValue ); // Reads a dword from the offset
MemoryReader.Read<BYTE>( 0x00411474, byteByteValue ); // Reads a byte from the offset
printf( "Value: %Xrn", dwDwordValue );
printf( "Value: %X", byteByteValue );
Should probably note that this is for inprocess stuff, so just change *(T*)xxx to ReadProcessMemory, etc.