Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2017, 10:40   #1
10vital08
 
Регистрация: 26.01.2017
Сообщений: 3
По умолчанию Обновить дату и время создания в заголовке файла PE-формата

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

int _tmain(int argc, _TCHAR* argv[])
{
if (argc != 2)
{
std::cout << "Usage: UpdateDate.exe pe_file" << std::endl;
return 0;
}

LoadLibraryEx(argv[1], NULL, LOAD_LIBRARY_AS_DATAFILE);

std::ifstream pefile;
pefile.open(argv[1], std::ios::in | std::ios::binary);//открытие ре-файла
if (!pefile.is_open())//если не удалось открыть файл
{
std::cout << "can't open file" << std::endl;//файл не открыт
return 0;
}


pefile.seekg(0, std::ios::end);
std::streamoff filesize = pefile.tellg();
pefile.seekg(0);

IMAGE_DOS_HEADER dos_header;
pefile.read(reinterpret_cast<char*> (&dos_header), sizeof(IMAGE_DOS_HEADER));
pefile.seekg(dos_header.e_lfanew);

IMAGE_NT_HEADERS nt_headers;
pefile.read(reinterpret_cast<char*> (&nt_headers), sizeof(IMAGE_NT_HEADERS)-sizeof(IMAGE_DATA_DIRECTORY)* 16);
char pszTemp[50];
if (&nt_headers && !IsBadReadPtr(&nt_headers, sizeof(PIMAGE_NT_HEADERS)))
{
DWORD dwTimestamp = nt_headers.FileHeader.TimeDateStamp ;
//If timer represents a date before midnight, January 1, 1970, gmtime returns NULL
__int64 LTS = dwTimestamp;
struct tm* pTS = gmtime((const time_t*)&LTS);
if (pTS)
{
sprintf(pszTemp, "%08X | %02d-%02d-%04d | %02d:%02d:%02d", dwTimestamp, pTS->tm_mday, pTS->tm_mon + 1, pTS->tm_year + 1900, pTS->tm_hour + 3, pTS->tm_min, pTS->tm_sec);
}

}
std::cout << pszTemp << std::endl;
return 0;
}
10vital08 вне форума Ответить с цитированием
Старый 26.01.2017, 10:55   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

В любом хекс-редакторе переходите по нужному смещению и меняете. Формат PE и его заголовок в частности описан и смещения известны. Или вы о чем?
p51x вне форума Ответить с цитированием
Старый 26.01.2017, 11:03   #3
10vital08
 
Регистрация: 26.01.2017
Сообщений: 3
По умолчанию

Мне нужно изменить TimeDateStamp: WORD — число хранящее дату и время создания файла.
10vital08 вне форума Ответить с цитированием
Старый 26.01.2017, 11:15   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Ну так меняйте. Вопрос в чем?
p51x вне форума Ответить с цитированием
Старый 26.01.2017, 11:23   #5
10vital08
 
Регистрация: 26.01.2017
Сообщений: 3
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Ну так меняйте. Вопрос в чем?
Когда я меняю значения, я могу лишь на консоль вывести новые присвоенные значения, а у самого exe-шника не изменяется дата создания. Подсказать можете?
10vital08 вне форума Ответить с цитированием
Старый 26.01.2017, 11:34   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Как ни странно, но после изменения их надо обратно записать в файл.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как проверить дату создания файла? ололошенько Софт 16 09.01.2022 13:10
Как определить дату создания файла sergei92 C++ Builder 1 24.11.2015 09:08
изменить дату создания файла pavellyba Общие вопросы Delphi 10 08.02.2015 20:30
как узнать дату создания файла green-shrek Помощь студентам 5 25.02.2010 17:33
Как установить дату создания файла vitalik007 Общие вопросы Delphi 1 11.12.2007 20:15