.NET アセンブリがビルドされた時刻を取得するためのコードを次に示します。ノート:
const int c_LinkerTimestampOffset = 8;
以降:
int secondsSince1970 = System.BitConverter.ToInt32(b, i + c_LinkerTimestampOffset);
このコードは、アセンブリ内に格納されているIMAGE_FILE_HEADER 構造体TimeDateStamp
のメンバーを抽出します。構造は次のように定義されます。
typedef struct _IMAGE_FILE_HEADER {
WORD Machine;
WORD NumberOfSections;
DWORD TimeDateStamp;
DWORD PointerToSymbolTable;
DWORD NumberOfSymbols;
WORD SizeOfOptionalHeader;
WORD Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
であり、WORD
2 バイトであり、2 バイトでアラインされている必要があります。次のコードを Visual C++ 10 でコンパイルすると:
IMAGE_FILE_HEADER header;
char* start = (char*)&header;
char* field = (char*)(&header.TimeDateStamp);
int diff = field - start;
diff
4
私が個人的に期待していたのと同じです。
それは C# コードのバグですか? のオフセット値が8
使用されるのはなぜですか?