c++ - 是否可以从链接的静态库 (.lib) 中知道执行 (.exe) 编译日期
问题描述
我正在开发一个商业静态库,想知道是否有可能找出使用它的 .exe 的编译日期或其他类似信息。
如果这是我的 .exe 文件,我会使用__DATE__
宏,但据我所知,宏在预处理期间会扩展,这在我有 .lib 文件时已经完成,因此我将拥有我的 .lib 的日期编译,而不是 .exe。
哪里有别的办法?甚至可能吗?
解决方案
感谢 Hans Passant 告诉我去哪里看。这是我根据他的评论提出的快速解决方案:
DWORD datePEbuilt = 0;
IMAGE_DOS_HEADER* DosHeader = (IMAGE_DOS_HEADER*) GetModuleHandle(NULL);
if (DosHeader->e_magic == IMAGE_DOS_SIGNATURE)
{
IMAGE_NT_HEADERS* peHeader = (IMAGE_NT_HEADERS*)((u_char*)DosHeader + DosHeader->e_lfanew);
if (peHeader->Signature == IMAGE_NT_SIGNATURE)
{
datePEbuilt = peHeader->FileHeader.TimeDateStamp;
}
}
需要一些清理和错误检查,但它适用于 x86 和 x64 版本!
推荐阅读
- wpf - 为什么由代码创建的 WPFMediaKit VideoCaptureElement 会出现在 MediaFailed 中?
- python - 如何从 Notebook 设置 Jupyter Notebook iopub_data_rate_limit?
- presto - Presto 连接到 Netezza
- c - 如何在C中计算crc8?
- html - 如何减少重复动态生成的html
- python - 在 PySpark DataFrame 中的 ArrayType 上使用 udf 时,“NoneType”对象不是可迭代错误
- iis - URL 重写到同一 IIS 中的特定站点
- python - 如何将 dask 系列保存到 hdf5
- php - wordpress rest api 授权
- python-2.7 - Python 图像库失败并显示消息“IOError:decoder jpeg not available” - 在 SageMath Notebook 中编译时 PIL