c++ - 读取可执行文件的节数失败

标签 c++ windows portable-executable

不知何故,以下代码输出“Number of sections: 57344”,这显然是不正确的。谁能提示我做错了什么?

#include <windows.h>
#include <iostream>
#include <vector>
#include <sstream>
#include <fstream>
#include <iterator>
#include <algorithm>

int main() {
std::string file_path = "C:\\foo.exe";
if(!file_path.size()) {
    cout << "No file was selected" << endl;
    return 1;
}
std::ifstream input( file_path.c_str(), std::ios::binary );
std::vector<unsigned char> buffer((
    std::istream_iterator<unsigned char>(input)), 
    (std::istream_iterator<unsigned char>()));

if(!buffer.size()) {
    cout << "Error reading file" << endl;
    return 1;
}
char * BinFile = (char*)&buffer[0];
IMAGE_DOS_HEADER* DOSHeader = (IMAGE_DOS_HEADER*)BinFile;
IMAGE_NT_HEADERS* NTHeader = (IMAGE_NT_HEADERS*)(BinFile + DOSHeader->e_lfanew);
cout << "Number of sections: " << NTHeader->FileHeader.NumberOfSections << endl;

return 0;
}

最佳答案

istream_iterator使用 operator<<这是unsuitable for binary data

使用 istream::read反而。

您可以获取文件大小,通过搜索到末尾,然后调用 tellg .相应地调整 vector 的大小并直接读取它。

关于c++ - 读取可执行文件的节数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15088977/

相关文章:

windows - 如何从页眉和/或页脚确定 PE 可执行文件的大小

c - 加载 PE header

c++ - 如何使用非常小的库或 native 代码 c/c++ 获取 MP3 文件(CBR 或 VBR)的持续时间?

C++自定义迭代器构造函数

android - Qt- 从 Android 资源添加自定义 XML

javascript - 使用 D3.js 只渲染 topojson map 的一部分

windows - Windows 中每个应用程序最近的伪文档

c++ - 无法实例化简单的类

windows - 一个PHP开发者的文件同步程序

c# - PE格式自检