ok so i found this tutorial online about a warrock address logger
Code:
Coding
Now add a new source file and call it main.cpp. First of all, define your includes. We will only need these two:

#include 
#include 

Right after that declare your globals:

DWORD dwStartAddress; // The address in memory the scan will begin at
DWORD dwSize; // The scanning range

Alright, now we are going to add the two main functions that enable us to scan for byte masks in a process.

This one simply compares the bytes of the current address to the bytes of our byte mask. If the bytes are equal, it returns 1 (true):

BOOL bCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
for(;*szMask;++szMask,++pData,++bMask)
{
if(*szMask == 'x' && *pData != *bMask)
return 0;
}
return (*szMask) == NULL;
}

The next function is the main scan function. It scans the defined range in the process for our byte mask by calling bCompare. If bCompare returns 1 (true), it either extracts 4 bytes of the found address or it returns the found address. The extraction of bytes is always needed when we are looking for a pointer:

DWORD FindPattern(BYTE *bMask, char * szMask, int codeOffset, BOOL extract)
{
for(DWORD i = 0; i < dwSize; i++)
{
if(bCompare((BYTE*)(dwStartAddress + i),bMask,szMask))
{
if(extract) // Extract bytes from Address
{
return *(DWORD*)(dwStartAddress + i + codeOffset);
}
else // Take the address the bytes were found at
{
return (DWORD)(dwStartAddress + i + codeOffset);
}
}
}
return NULL;
}

Now we are going to add the main thread of our application which calls the function above. Our scan patterns are defined there, too:

void SearchPatterns(void)
{
Sleep(1000); // Give the process some time to load

dwStartAddress = 0;
do {
dwStartAddress = (DWORD)GetModuleHandle("warrock.exe"); // Define start address here
Sleep(10);
} while(!dwStartAddress);

dwSize = 0x500000; // Define search length here

// Get the name and location of this dll file and prepare the name for the .ini log-file
char szLogName[MAX_PATH];
HMODULE dllHandle = GetModuleHandle("dll-Addresslogger.dll"); // Enter the name of your dll-file here
GetModuleFileName(dllHandle, szLogName, MAX_PATH);
szLogName[strlen(szLogName)-3] = 0;
strcat_s(szLogName, "ini");
DeleteFile(szLogName); // Delete the file, in case it already exists

// Add new patterns here, don't forget to make new strings and to write them to the file
DWORD dwPlayerPointer = FindPattern((PBYTE)"\xA1\xFF\xFF\xFF\xFF\x85\xC0\x74\x08", "x????xxxx", 1, true);

TCHAR chPlayerPointer[10];
sprintf_s(chPlayerPointer, "%X", dwPlayerPointer); // Converting the player pointer address into a string

WritePrivateProfileString(TEXT("Addresses"), TEXT("ADR_PLAYERPTR"), (LPCSTR)chPlayerPointer, szLogName); // Save the player pointer string to a log file

ExitProcess(0); // When finished kill the process
}

The only byte mask I added, is the one for the player pointer of the game WarRock. All the unknown bytes are replaced by a FF. The second parameter of the FindPattern function is the pattern of the bytes of the address. Each unknown byte is replaced by a question mark (?). All the other bytes are replaced by x. The third parameter is the offset which tells the logger not to save the first 4 bytes of the address but the second 4. So it basically skips the first byte. The fourth parameter tells the logger to extract bytes and not to simply take the address the bytes were found at. When found, the address is logged into a .ini-file which has the same name as the .dll-file. Eventually the process we have scanned is closed down. I added this feature because I assume that if you use this addresslogger, you just want to scan for addresses and not to play a game…
Now we are creating the entry point of our .dll-file. The main function:

BOOL WINAPI DllMain(HMODULE hDll, DWORD dwReason, LPVOID lpReserved)
{
if(dwReason == DLL_PROCESS_ATTACH)
{
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)SearchPatterns, NULL, NULL, NULL);
}
return TRUE;
}
So if someone could make this and pm it to me that would be awsome