如何在exe中找到字符串?

时间:2018-11-15 13:36:05

标签: c++ windows visual-studio winapi

  

找到

功能不能与exe一起使用?我尝试在exe中找到wstring。它总是不匹配。但是,如果我创建一个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 :(得分:3)

该可执行文件可能早在文件中就有0个字节(即0x00)。当您执行sFile = buffer;时,它假定buffer是C样式的字符串,以0字节结尾。因此sFile将只包含该点之前的字节。

要解决此问题,您应该将整个缓冲区放入字符串中:

std::wstring sFile(buffer, length); // Directly using the constructor, or
sFile.assign(buffer, length);       // after construction

答案 1 :(得分:1)

只是改变

std::wstring sFile;
sFile = buffer;

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

当将char-buffer分配给wstring对象时,字符串的长度由第一个空字符确定。因此,文件中包含的第一个0x00字节表示字符串的结尾。