Code:
#define realAddy( cast, base, offset ) (cast)((DWORD)(base) + (DWORD)(offset))
template <typename T>
bool exist(BYTE part, T whole)
{
BYTE *start = (BYTE*)&whole;
for(DWORD loc = 0; loc < sizeof(whole); loc++)
if(*(BYTE*)(start + loc) == part) return true;
return false;
}
DWORD lastLocationOfByte(BYTE part, T whole)
{
BYTE *start = (BYTE*)&whole;
for(DWORD loc = 0; loc < sizeof(whole); loc++)
if(*(BYTE*)(start + sizeof(whole) - loc) == part) return (sizeof(whole) - loc);
}
T *searchAddy(T val)
{
MEMORY_BASIC_INFORMATION memInfo;
VirtualQuery(NULL, &memInfo, sizeof(MEMORY_BASIC_INFORMATION));
size_t total = memInfo.RegionSize;
T *first = (T*)memInfo.BaseAddress;
size_t next = sizeof(val);
T *addy = (T*)(--(&val + next));
bool exist = false;
T *loc;
unsigned char check;
for(DWORD n = (next - 1); n < total;)
{
DWORD spot;
for(spot = 0; *(unsigned char*)(first + n - spot) == *(unsigned char*)(addy - spot); spot++);
if(spot == next) return realAddy( T*, first, n );
else if(exist(*(BYTE*)(first + n), val)
n += lastLocationOfByte(*(BYTE*)(first + n), val);
else n += next;
}
return false;
}