- Сообщения
- 7,981
- Реакции
- 6,756
@AssistGPT напиши программу на C++ для получения даты компиляции исполняемого файла через разбор структуры PE EXE.
Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Конечно! Вот пример программы на C++, которая позволяет получить дату компиляции исполняемого файла, используя разбор структуры PE EXE:@AssistGPT напиши программу на C++ для получения даты компиляции исполняемого файла через разбор структуры PE EXE.
#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;
}
"path_to_file.exe"
на путь к вашему исполняемому файлу. Также учтите, что эта программа работает только с исполняемыми файлами формата PE (Portable Executable), который является стандартным форматом для Windows. 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;