[英]Reading a char array from a text file
我有一個功能:
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* 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;
就我所見,面具還可以,但我的圖案有問題。
我想我必須抑制“\\”或將它們加倍(“\\\\”)。
問題是"\\x89\\x41\\x24\\xE9\\x00\\x00\\x00\\..."
是 C++ 源代碼中字符串文字的表示法。 此符號僅在作為源代碼的一部分時才具有特殊含義。 編譯器將其解釋為具有值0x89
、 0x41
等的字節序列。
如果將其按原樣復制到文本文件中,則文件中真正包含的是以下字節序列: \\
、 x
、 8
、 9
、 \\
、 x
、 4
等
如果所需的字節序列不是有效文本,則無法將其存儲在文本文件中。 您必須使用例如十六進制編輯器制作一個二進制文件,或者您應該選擇一種文本表示形式並在讀入時進行轉換。
例如,您可以將其表示為由空格分隔的整數:
137 65 36 233
然后用以下命令閱讀它:
std::string result;
std::fstream myfile("D:\\data.txt", std::ios_base::in);
int a;
while (myfile >> a)
{
result += static_cast<char>(a);
}
std::cout << result << std::endl;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.