Как найти строку в exe? - PullRequest
0 голосов
/ 15 ноября 2018

is

find

функция не может работать с exe?я пытаюсь найти wstring в exe.это всегда не совпадает.но если я создаю txt и копирую двоичный файл из exe в txt, и он может его найти.

    std::wifstream file(L"D:/file.exe", std::ios::binary);
if (file.is_open())
{
    file.seekg(0, file.end);
    std::streamoff length = file.tellg();
    file.seekg(0, file.beg);
    wchar_t *buffer = new wchar_t[length];
    file.read(buffer, length);
    std::wstring sFile;
    sFile = buffer;
    size_t index = sFile.find(L"Something");
    if (index != std::string::npos) std::cout << "It's found";
    file.close();
    delete[] buffer;
}
else
{
    std::cout << "It's not open";
}

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Просто измените

std::wstring sFile;
sFile = buffer;

на

std::wstring sFile(buffer, buffer+length);

Когда вы назначаете char-буфер для объекта wstring, длина строки определяется первым нулевым символом.Итак, первый байт 0x00, содержащийся в вашем файле, обозначает конец строки.

0 голосов
/ 15 ноября 2018

Возможно, исполняемый файл имеет число 0 байтов (т. Е. 0x00) в начале файла. Когда вы делаете sFile = buffer;, предполагается, что buffer - это строка в стиле C, которая заканчивается 0 байтом. Так что sFile будет содержать только байты до этой точки.

Чтобы исправить это, вы должны поместить весь буфер в строку:

std::wstring sFile(buffer, length); // Directly using the constructor, or
sFile.assign(buffer, length);       // after construction
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...