我有一个名为 ab.exe 的文件,它包含十六进制
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BBAAE8CAFDFFFF83C408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054AAE8CAFDFFFF83C40800000000000000000000000000000000000000000000000000000000000000000000000000AAE8CAFDFFFF83C4088D000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
我在 C++ 中有这段代码,它假设检测一个十六进制字符串是否在文件中,以及是否将其添加到列表框中。
array<Byte>^ target1 = { 0xAA,0xE8,0xCA,0xFD,0xFF,0xFF,0x83,0xC4,0x08,0x8D };
array<Byte>^ target2 = { 0x54,0xAA,0xE8,0xCA,0xFD,0xFF,0xFF,0x83,0xC4,0x08 };
array<Byte>^ target3 = { 0xBB,0xAA,0xE8,0xCA,0xFD,0xFF,0xFF,0x83,0xC4,0x08 };
int matched1 = 0;
int matched2 = 0;
int matched3 = 0;
FileStream^ fs2 = gcnew FileStream(line, FileMode::Open, FileAccess::Read, FileShare::ReadWrite);
int value;
do
{
value = fs2->ReadByte();
if (value == target1[matched1]) {
matched1++;
}
else
matched1 = 0;
if (value == target2[matched2]) {
matched2++;
}
else
matched2 = 0;
if (value == target3[matched3]) {
matched3++;
}
else
matched3 = 0;
if(matched1 == target1->Length)
{
listBox1->Items->Add(line + "1");
}
if(matched2 == target2->Length)
{
listBox1->Items->Add(line + "2");
}
if(matched3 == target3->Length)
{
listBox1->Items->Add(line + "3");
}
} while (value != -1);
fs2->Close();
问题是它只将 line + 3 添加到列表框中,而不是 line + 1 或 line + 2 添加到列表框
我不知道为什么这是因为所有 3 个字符串都在文件中,所以它们都应该添加到列表框中。出于某种原因,只添加了最后一个,因为我尝试只添加了 2 个,而添加了第二个。有人可以告诉我为什么它们没有全部添加到列表框中。谢谢
更新1
在玩了一些之后,它不是每次添加的最后一个目标,而是出现在文件中的第一个字符串被添加。我使用消息框逐步完成程序,发生的事情是 54AAE8CAFDFFFF83C408 是文件中出现的第一个字符串,然后将添加行 + 2,但由于某种原因,所有 3 的匹配整数停止计数,它们只是 = 0文件的其余部分。有人可以向我解释为什么会这样以及如何解决它。
更新2
这是问题的答案。我需要做的只是添加一个matched = 0; 在每个添加到列表框命令之后。
listBox1->Items->Add(line + "1");
matched1 = 0;
listBox1->Items->Add(line + "2");
matched2 = 0;
listBox1->Items->Add(line + "3");
matched3 = 0;