Here's a piece of code for obtaining the time when a .NET assembly was built。注意這一行:爲什麼處理時間戳的代碼使用帶符號整數?
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;
和DWORD
定義如下:
typedef unsigned long DWORD;
和結構的描述說,TimeDateStamp
是由於在過去的任意的時刻的秒數,所以它不能是負面的。
爲什麼C#代碼使用簽名類型int
來存儲該無符號值?
「自午夜(00:00:00),1970年1月1日,經過秒數」在理論上必須是負數。 (雖然我認爲在那之前並不是很多.NET程序集,但它也會說「根據系統時鐘」......可能在說什麼?) – Rawling
@Rawling:PE文件格式肯定是在那一刻發明的。 – sharptooth
點了,雖然我編輯了我的評論:) – Rawling