ab.exe と呼ばれるこのファイルがあり、16 進数でこれが含まれています。
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BBAAE8CAFDFFFF83C408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054AAE8CAFDFFFF83C40800000000000000000000000000000000000000000000000000000000000000000000000000AAE8CAFDFFFF83C4088D000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
16 進数の文字列がファイル内にあるかどうか、およびそれがリスト ボックスに追加されているかどうかを検出すると思われる 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();
問題は、リスト ボックスに行 + 3 のみが追加され、行 + 1 または行 + 2 がリスト ボックスに追加されないことです。
3 つすべての文字列がファイルに含まれているため、リスト ボックスにすべて追加する必要があるため、その理由はわかりません。何らかの理由で、最後の 1 つだけが追加されています。なぜなら、リスト ボックスにすべてが追加されていない理由を教えてください。ありがとう
アップデート1
もう少しいじってみると、毎回追加されるのは最後のターゲットではなく、追加されるのはファイルに表示される最初の文字列です。メッセージボックスを使用してプログラムをステップ実行しましたが、54AAE8CAFDFFFF83C408 がファイルに表示される最初の文字列であり、行 + 2 が追加されますが、何らかの理由で 3 つすべての一致した整数のカウントが停止し、単に = 0ファイルの残りの部分。誰かがそれがなぜなのか、それを修正する方法を私に説明できますか.
Update2
これが問題の答えです。私がする必要があったのは、matched = 0; を追加することだけでした。リストボックスコマンドに追加するたびに。
listBox1->Items->Add(line + "1");
matched1 = 0;
listBox1->Items->Add(line + "2");
matched2 = 0;
listBox1->Items->Add(line + "3");
matched3 = 0;