ファイルの 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 array
しInt
、 を読み取ろPE Header
ていますが、アクセス違反の未処理の例外が発生しています。これは完全なコードです。ファイルは有効で、読み取られています。デバッグを試し、最適化を無効にしましたが、役に立ちませんでした。
親切なアドバイス。
どうもありがとう。