#include <iostream>
#include <fstream>
#include <windows.h>
int main() {
// Замените "path_to_file.exe" на путь к вашему исполняемому файлу
const char* filePath = "path_to_file.exe";
std::ifstream file(filePath, std::ios::binary);
if (!file) {
std::cout << "Не удалось открыть файл." << std::endl;
return 1;
}
// Перемещаемся к началу PE-заголовка
file.seekg(0, std::ios::end);
std::streampos fileSize = file.tellg();
file.seekg(0, std::ios::beg);
// Читаем DOS-заголовок
IMAGE_DOS_HEADER dosHeader;
file.read(reinterpret_cast<char*>(&dosHeader), sizeof(IMAGE_DOS_HEADER));
// Проверяем сигнатуру DOS-заголовка
if (dosHeader.e_magic != IMAGE_DOS_SIGNATURE) {
std::cout << "Неверная сигнатура DOS-заголовка." << std::endl;
return 1;
}
// Перемещаемся к PE-заголовку
file.seekg(dosHeader.e_lfanew, std::ios::beg);
// Читаем PE-заголовок
IMAGE_NT_HEADERS ntHeaders;
file.read(reinterpret_cast<char*>(&ntHeaders), sizeof(IMAGE_NT_HEADERS));
// Проверяем сигнатуру PE-заголовка
if (ntHeaders.Signature != IMAGE_NT_SIGNATURE) {
std::cout << "Неверная сигнатура PE-заголовка." << std::endl;
return 1;
}
// Получаем дату компиляции
DWORD timestamp = ntHeaders.FileHeader.TimeDateStamp;
time_t compileTime = timestamp;
std::cout << "Дата компиляции: " << asctime(localtime(&compileTime));
file.close();
return 0;
}