首页 > 解决方案 > 如何在exe中找到字符串?

问题描述

寻找

功能不能与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";
}

标签: c++windowsvisual-studiowinapi

解决方案


0x00可执行文件可能在文件的早期有许多 0 字节(即)。当您这样做sFile = buffer;时,它假定这buffer是一个以 0 字节结尾的 C 样式字符串。所以sFile只会包含到那个点的字节。

要修复它,您应该将整个缓冲区放入字符串中:

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

推荐阅读