2017-04-05 40 views
-3

我正在編寫一些關於windows PE頭的東西。我想確定時間戳值。 這是_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; 

價值這個變量被TimeDateStamp:0x58e451ac

+1

首先谷歌命中搜索「_IMAGE_FILE_HEADER」:[MSDN](https://msdn.microsoft.com/en-us/library/windows/desktop/ms680313(v = vs.85).aspx)。 –

+0

文檔說它是時間戳的低32位,這是1970年1月1日午夜(00:00:00)以來的秒數,世界時間。它將在2106-02-07T06:28:16 + 00:00繞回到0。 –

+0

TimeDateStamp 0x58e451ac對應於2017-04-05T02:08:44 + 00:00。 –

回答

0

我發現溶液那樣。

time_t TimeX = (time_t)header.TimeDateStamp; 
tm* pGMT = gmtime(&TimeX); 
char* pTime = asctime(pGMT); 
1

根據MSDN: IMAGE_FILE_HEADER structure,的IMAGE_FILE_HEADERTimeDateStamp構件是圖像的時間戳中的低32位。它表示圖像由鏈接器創建的時間。該值表示自1970年1月1日開始以世界協調時間開始的秒數。

它可以轉換使用下面的函數FILETIME值:

FILETIME TimeDateStampToFileTime(DWORD timeDateStamp) 
{ 
    ULARGE_INTEGER ftu; 
    FILETIME ft; 

    ftu.QuadPart = (timeDateStamp + 11644473600ull) * 100000000ull; 
    ft.LowPart = ftu.u.LowPart; 
    ft.HighPart = ftu.u.Highpart; 
    return ft; 
} 

然後你可以使用Windows FileTimeToSystemTime功能轉換FILETIME到一個破舊的SYSTEMTIME結構。

+0

我在'TimeDateStampToFileTime()'中得到了錯誤的乘法和加法。我現在糾正了它。 –