2017-04-05 5 views
-3

Ich habe etwas über Windows PE-Header codiert. Ich möchte den Timestamp-Wert ermitteln. Dies ist _IMAGE_FILE_HEADER StrukturSo ermitteln Sie 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; 

Wert dieser Variablen TimeDateStamp ist: 0x58e451ac

+1

Erste Google-Suche nach "_IMAGE_FILE_HEADER": [MSDN] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms680313 (v = vs.85) .aspx). –

+0

Die Dokumente sagen, dass es die niedrigen 32 Bits des Zeitstempels sind, die die Anzahl der Sekunden seit Mitternacht (00:00:00) am 1. Januar 1970, Universalzeit ist. Es wird bei 2106-02-07T06: 28: 16 + 00: 00 um 0 herumgehen. –

+0

Der TimeDateStamp 0x58e451ac entspricht 2017-04-05T02: 08: 44 + 00: 00. –

Antwort

0

I-Lösung so gefunden.

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

Nach MSDN: IMAGE_FILE_HEADER structure das TimeDateStamp Mitglied IMAGE_FILE_HEADER sind die niedrigen 32 Bits des Zeitstempels des Bildes. Es stellt die Zeit dar, in der das Bild vom Linker erstellt wurde. Der Wert wird als die Anzahl der Sekunden seit Beginn des 1. Januar 1970 in Universal Coordinated Time dargestellt.

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; 
} 

Dann können Sie die FILETIME auf eine kaputte SYSTEMTIME Struktur mithilfe der Windows-Funktion FileTimeToSystemTime konvertieren:

Es könnte mit der folgenden Funktion auf einen FILETIME Wert umgewandelt werden.

+0

Ich habe die Multiplikation und Addition falsch in 'TimeDateStampToFileTime()'. Ich habe es jetzt korrigiert. –

Verwandte Themen