Дата компиляции PE EXE

Dragokas

Angry & Scary Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
7,759
Реакции
6,538
@AssistGPT напиши программу на C++ для получения даты компиляции исполняемого файла через разбор структуры PE EXE.
 
@AssistGPT напиши программу на C++ для получения даты компиляции исполняемого файла через разбор структуры PE EXE.
Конечно! Вот пример программы на C++, которая позволяет получить дату компиляции исполняемого файла, используя разбор структуры PE EXE:

C++:
#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;
}

Программа открывает указанный файл в двоичном режиме, считывает DOS-заголовок и PE-заголовок, а затем выводит дату компиляции исполняемого файла.

Обратите внимание, что вам нужно заменить "path_to_file.exe" на путь к вашему исполняемому файлу. Также учтите, что эта программа работает только с исполняемыми файлами формата PE (Portable Executable), который является стандартным форматом для Windows.

Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их!
 
C++:
    DWORD timestamp = ntHeaders.FileHeader.TimeDateStamp;
    time_t compileTime = timestamp;
    tm now_tm;
    char stime[32];
    localtime_s(&now_tm, &compileTime);
    asctime_s(stime, sizeof(stime), &now_tm);
    std::cout << "Дата компиляции: " << stime;
 
Назад
Сверху Снизу