DWORD FindPattern(DWORD base, DWORD size, char *pattern, char *mask)
{
// Get length for our mask, this will allow us to loop through our array
DWORD patternLength = (DWORD)strlen(mask);
for (DWORD i = 0; i < size - patternLength; i++)
{
bool found = true;
for (DWORD j = 0; j < patternLength; j++)
{
// If we have a ? in our mask then we have true by default,
// or if the bytes match then we keep searching until finding it or not
found &= mask[j] == '?' || pattern[j] == *(char*)(base + i + j);
}
// Found = true, our entire pattern was found
// Return the memory addy so we can write to it
if (found)
{
return base + i;
}
}
return NULL;
}
が、私はメモリの特定のセクションにバイトを見つけるために使用私のFindPattern関数であり、ここで私は関数を呼び出す方法は次のとおりです。変換進整数「 x」の - 上記(C++メモリ)
DWORD PATTERN = FindPattern(0xC0000000, 0x20000,"\x1F\x37\x66\xE3", "xxxx");
PrintStringBottomCentre("%02x", PATTERN);
今、例えば整数があったとします:0xDEADBEEF これを "\ xDE \ xAD \ xBE \ xEF"のようなcharポインタに変換したいのですが、これをFindPattern関数に入れることができます。どうすればいい?
'\のX 'フォームはあなたのコード内の文字列_literal_形です。メモリには存在しません。実際には '0xDEADBEEF'と同じです。 '0x'はコンパイラ用です。 – MSalters
私は\ xは必要ないと言っていますか? –
実際、実行時にパターンを作成してから、コンパイラはありません。 – MSalters