0

どういうわけか、次のコードは「セクション数: 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;
}
4

1 に答える 1

4

istream_iteratoroperator<<バイナリデータには不適切なものを使用します

istream::read代わりに使用してください。

最後までシークしてからを呼び出すことで、ファイルサイズを取得できますtellg。それに応じてベクトルのサイズを変更し、直接読み取ります。

于 2013-02-26T12:25:48.503 に答える