| 9 | } |
| 10 | |
| 11 | PBYTE FindPattern(PVOID module, DWORD size, LPCSTR pattern, LPCSTR mask) { |
| 12 | |
| 13 | auto checkMask = [](PBYTE buffer, LPCSTR pattern, LPCSTR mask) -> BOOL |
| 14 | { |
| 15 | for (auto x = buffer; *mask; pattern++, mask++, x++) { |
| 16 | auto addr = *(BYTE*)(pattern); |
| 17 | if (addr != *x && *mask != '?') |
| 18 | return FALSE; |
| 19 | } |
| 20 | |
| 21 | return TRUE; |
| 22 | }; |
| 23 | |
| 24 | for (auto x = 0; x < size - strlen(mask); x++) { |
| 25 | |
| 26 | auto addr = (PBYTE)module + x; |
| 27 | if (checkMask(addr, pattern, mask)) |
| 28 | return addr; |
| 29 | } |
| 30 | |
| 31 | return NULL; |
| 32 | } |
| 33 | |
| 34 | PBYTE FindPattern(PVOID base, LPCSTR pattern, LPCSTR mask) { |
| 35 |
no test coverage detected