从文本文件(.txt)中读取字节数组



我正在用c++编写程序,我有一个文本文件,其中包含我想在随机进程(我使用Windows)的内存中扫描的模式/字节数组。

File.txt:内部内容

x55x8BxECx83x44x0Cx7CxDF

我设法读取这个字符串并使用printf()完美地打印它,但是当我将这个字符串作为const char*传递给我的模式扫描函数时,它不会在我说的随机过程中返回函数的地址。

我做了一个奇怪的测试:

DWORD function_address = findpattern(module_from_random_process_here, "x55x8BxECx83x44x0Cx7CxDF", mask);

请注意,我在其中硬编码我的模式,而不是使用我在File.txt中读取的模式。

它返回了正确的内存地址,但是如果我把我从我的File.txt中读取的模式,地址无法在我正在扫描的进程的内存中找到。但问题是,当我打印从文本文件中读取的模式时,它显示正确!

另一件事:我也做了另一个测试,如果我从我的File.txt中读取掩码,并使用我在findpattern调用中读取的掩码,它可以工作(只是模式"不工作")。

有些事情让我认为这是与读取我的File.txt中的内容作为十六进制有关的东西,但我有问题使其工作

信息:读取模式内的文件。txt我很简单使用std::ifstreamstd::geline(File.txt, strPattern)

在读取文件时,您应该始终考虑它的编码。文件中的不同字符可以被解释为不同的十六进制值。例如,我们以字符串x55x8B为例。它可以被强制转换为不同的数字根据不同编码的字符。如果你使用8位编码系统,它可能是两个字符;如果你决定使用16位编码系统,它可能是一个字符。

如果我理解正确的话,您希望字符串x55x8B为8个字符。如果是这样,我们需要了解您的文件使用的是哪种编码。您写的文件包含字符串x55x8BxECx83x44x0Cx7CxDF。是二进制数据吗?是utf-8吗?也许ascii ?每个选项都有不同的二进制表示。

编辑:根据注释,您需要一个逻辑将二进制值x65转换为字符串"x65"这可以使用:

int a = 0x65;
std::string str = "\x" + std::to_string((a >> 4) & 0xFF) + std::to_string(a & 0x0F);

还在这里添加了铸型的另一边,也许这将是方便的。如果你需要强制转换字符串"x65"对其值使用this:

std::string str= "\x65";
std::stringstream ss;
int x;
ss << std::hex << str.substr(str.find('x')+1);
ss >> x;

最新更新