【发布时间】:2021-12-14 01:49:13
【问题描述】:
我正在用 C++ 编写程序,并且我有一个文本文件,其中包含我想在随机进程的内存中扫描的模式/字节数组(我使用的是 Windows)。
File.txt:内的内容
\x55\x8B\xEC\x83\x44\x0C\x7C\xDF
我设法读取了这个字符串并用 printf() 完美地打印它,但是当我将此字符串作为 const char* 传递给我的模式扫描函数时,它不会在我所说的随机过程中返回函数的地址。
我做了一个奇怪的测试:
DWORD function_address = findpattern(module_from_random_process_here, "\x55\x8B\xEC\x83\x44\x0C\x7C\xDF", mask);
-> 请注意,我在其中硬编码了我的模式,而不是使用我在 File.txt 中读到的模式。
它返回了正确的内存地址,但如果我把从File.txt 读取的模式放入,则在我正在扫描的进程的内存中找不到该地址。但问题是,当我打印从文本文件中读取的模式时,它显示正确!
另一件事:我也做了另一个测试,如果我从File.txt 中读取掩码并使用我在 findpattern 调用中读取的掩码,它可以工作(只是模式“不起作用”)。
有些事情让我觉得这与将 File.txt 中的内容读取为十六进制有关,但我无法使其正常工作。
信息:读取 File.txt 中的模式我很简单,使用 std::ifstream 和 std::geline(File.txt, strPattern)
【问题讨论】:
-
请注意,反斜杠在
c++文字中具有特殊含义,但在通用文本文件中没有。 -
您好,感谢您的回复!你建议我如何修复它?从昨天开始,我正在尝试修复它大约 10 个小时 :(
-
像
"\x55"这样的文字字符串由编译器转换为由字节值为0x55 的字符组成的字符串。如果您的文件包含此字符串,您必须编写逻辑来对您从中读取的字符串进行相同的转换。