精易论坛

标题: 取PE文件的链接时间[附 原理注释] [打印本页]

作者: 嫂子    时间: 2025-1-3 23:58
标题: 取PE文件的链接时间[附 原理注释]
缘起:
取文件真实创建时间_精易论坛
图:

代码【带注释】:
[Delphi] 纯文本查看 复制代码
function GetPETimestamp(const FileName: string): TDateTime;
var
  FileBase: Pointer;
  DosHeader: PImageDosHeader;
  NTHeaders: PImageNtHeaders;
  TimeStamp: DWORD;
begin
  Result := 0;
  var FileHandle := CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ, nil,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if FileHandle = INVALID_HANDLE_VALUE then
    Exit;
  try
    //创建文件映射 因为PE文件可能会很大
    var FileMapping := CreateFileMapping(FileHandle, nil, PAGE_READONLY, 0, 0, nil);
    if FileMapping = 0 then
      Exit;
    try
      //读取映射文件
      FileBase := MapViewOfFile(FileMapping, FILE_MAP_READ, 0, 0, 0);
      if FileBase = nil then
        Exit;
      try
        //读取Dos头
        DosHeader := PImageDosHeader(FileBase);
        //如果Dos头不正确 退出不是PE文件
        if DosHeader^.e_magic <> IMAGE_DOS_SIGNATURE then
          Exit;
        //读取NT头
        NTHeaders := PImageNtHeaders(PByte(FileBase) + DosHeader^._lfanew);
        //NT头不正确 退出
        if NTHeaders^.Signature <> IMAGE_NT_SIGNATURE then
          Exit;
        //NT头DOS头都正确 是PE文件。从NT头读取PE文件的链接时间
        TimeStamp := NTHeaders^.FileHeader.TimeDateStamp;
        //Unix转换为可读的时间
        Result := UnixToDateTime(TimeStamp,False);
      finally
        UnmapViewOfFile(FileBase);
      end;
    finally
      CloseHandle(FileMapping);
    end;
  finally
    CloseHandle(FileHandle);
  end;
end;




作者: wh1234567    时间: 2025-1-4 00:02
感谢分享
作者: 7ian    时间: 2025-1-4 00:13
这个看着挺好
作者: 嫂子    时间: 2025-1-4 00:24
7ian 发表于 2025-1-4 00:13
这个看着挺好

还是你起的头 哈哈  
作者: pshq123    时间: 2025-1-4 05:08
感谢分享
作者: qq977352880    时间: 2025-1-4 06:30
作者用心了,感谢你的付出。

作者: 一指温柔    时间: 2025-1-4 08:38
#在这里快速回复#支持开源~!感谢分享
作者: gdhong    时间: 2025-1-4 09:05
666666666666666666666666
作者: 无二22222    时间: 2025-1-4 10:02
作者用心了,感谢你的付出。
作者: 卡卡1111    时间: 2025-1-4 16:05
支持开源~!感谢分享
作者: dj1990    时间: 2025-1-4 16:30
作者用心了,感谢你的付出。
作者: pipicool    时间: 2025-1-4 17:52
学习一下
作者: 何浩文    时间: 2025-1-4 18:49
支持开源~!感谢分享
作者: ttggnn    时间: 2025-1-4 20:03
支持开源~!感谢分享




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4