【发布时间】:2018-12-23 05:44:29
【问题描述】:
我有一个函数:
uintptr_t FindPattern(HANDLE hProcess, uintptr_t start, uintptr_t end, char *pattern, char *mask);
当我这样称呼它时,就可以了:
uintptr_t found = FindPattern(hProcess, START, END, "\x89\x41\x24\xE9\x00\x00\x00\x00\x8B\x46\x00\x6A\x00\x6A\x00\x50\x8B\xCE\xE8", "xxxx????xx?xxxxxxxx");
现在,我将模式和掩码存储在一个文本文件中,将它们作为字符串读取,然后将它们转换回 char,但它不再起作用:
char* tmp1 = new char[pattern.length() + 1];
strncpy(tmp1, pattern.c_str(), pattern.length());
tmp1[pattern.length()] = '\0';
char* tmp2 = new char[mask.length() + 1];
strncpy(tmp2, mask.c_str(), mask.length());
tmp2[mask.length()] = '\0';
uintptr_t found = FindPattern(hProcess, START, END, tmp1, tmp2);
delete[] tmp1;
delete[] tmp2;
就我所见,掩码没问题,但我遇到了图案问题。
我想我必须取消“\”或者将它们加倍(“\\”)。
【问题讨论】:
-
你能分享
FindPattern函数的代码吗? -
您发布的代码是正确的。该错误在其他地方,可能在
FindPattern或者可能在阅读代码中。 -
strncpy(tmp1, pattern.c_str(), pattern.length());不 nul-terminatetmp1。来自strncpy的手册页“警告: 如果 src 的前 n 个字节中没有空字节,则放在 dest 中的字符串不会以空值结尾。” (强调原文,man 3 strncpy)要修复,请使用pattern.length() + 1,或仅使用strcpy。