2

ファイルの PE ヘッダーを読み取って情報を取得しようとしています。.NETとについては、ファイルを読み取った後に取得した Byte 配列を同等の整数に変換するためにC#使用しています。BitConverterで同じことをしたいのC++ですが、最善のアプローチがわかりません。を同等のものunsigned char arrayとして使用しています。Byte array

コードを以下に示します。

uint16_t GetAppCompiledMachineType(string fileName)
{
    const int ptr_offset = 4096;            
    const int mac_offset = 4;
     char *data = new char[4096];
    fstream f;
    f.open(fileName, ios::in | ios::binary  );
    f.read(data, 4096);


    int32_t pe_addr= *reinterpret_cast<int32_t*>(data, ptr_offset);
    uint16_t machineUint = *reinterpret_cast<std::uint16_t*>(data, pe_addr + mac_offset);
    return machineUint;

 }
int _tmain(int argc, _TCHAR* argv[])
{

      string fileName = "<some_path>\\depends.exe";
      uint16_t tempInt = GetAppCompiledMachineType(fileName);
      cout<<tempInt;
      std::getchar();

    return 0;
}

O/P を使用して、PE ヘッダーに情報を問い合わせます。ここで BitCONverter に相当するものが必要です。うまくいけばうまくいくでしょう。

更新:返信ありがとうございます。示唆されているように、キャストを使用して を に変換character arrayInt、 を読み取ろPE Headerていますが、アクセス違反の未処理の例外が発生しています。これは完全なコードです。ファイルは有効で、読み取られています。デバッグを試し、最適化を無効にしましたが、役に立ちませんでした。

親切なアドバイス。

どうもありがとう。

4

3 に答える 3