【发布时间】:2012-09-28 11:48:16
【问题描述】:
Here's a piece of code for obtaining the time when a .NET assembly was built。注意:
const int c_LinkerTimestampOffset = 8;
及以后:
int secondsSince1970 = System.BitConverter.ToInt32(b, i + c_LinkerTimestampOffset);
此代码提取存储在程序集中的IMAGE_FILE_HEADER structure 的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 是两个字节,应该是两个字节对齐的。当我使用 Visual C++ 10 编译以下代码时:
IMAGE_FILE_HEADER header;
char* start = (char*)&header;
char* field = (char*)(&header.TimeDateStamp);
int diff = field - start;
diff 等于 4,正如我个人预期的那样。
这是 C# 代码中的错误吗?为什么使用8的偏移值?
【问题讨论】:
标签: c# c++ .net visual-c++