查看exe和dll等二进制文件时间戳(生成时间)的工具与方法介绍

目录

1、为何要查看二进制文件的时间戳

2、使用PEViewer工具查看文件的时间戳

3、使用EXE Explorer工具查看文件的时间戳

4、在Windbg中使用Windbg命令查看文件的时间戳

5、最后


VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931C++软件分析工具案例集锦(正在更新中)https://blog.csdn.net/chenlycly/category_12279968.html?spm=1001.2014.3001.5482       有时我们在排查问题需要查看exe或dll等二进制文件的时间戳(即文件的生成时间),去确定二进制文件的版本,本文就来大概地讲述一下如何使用工具去查看二进制文件的时间戳。

1、为何要查看二进制文件的时间戳

       我们在排查问题时,有时需要知道某个exe或dll文件的时间戳(文件编译生成时间),以确定二进制文件的版本。在Windows系统中,可以查看文件属性中的修改时间,但这个修改时间可能是文件拷贝过来或者被覆盖修改的时间,并不是文件的编译生成时间。

       比如我们在修改某个bug时,底层模块本地临时编译dll库发过来,我们本地临时覆盖去验证是否修改掉。可能要来回倒腾好几次(多次临时编译库发过来),可能在操作过程中没有使用最新的库,这时就需要使用工具查看dll库时间戳,看看当前使用的dll库是什么时候编译出来的。

       再比如我们在使用Process Explorer、IDA或者Windbg分析问题时,可能需要二进制文件的pdb符号库文件,有了pdb文件我们能看到更多的信息,比如函数名及变量信息等。要拿到二进制文件对应时间点的pdb文件,我们需要知道二进制文件的时间戳(编译生成时间),通过时间戳去找这个时间点对应的pdb文件。

pdb文件有严格的时间戳限制,pdb文件的时间必须要和二进制文件完全一致,才能使用。比如代码没修改,昨天和今天使用同样的代码编译出来的pdb文件都不能交叉使用的。

2、使用PEViewer工具查看文件的时间戳

       Windows平台上的二进制文件是PE格式的,其中时间戳就位于文件的PE头信息中,一般我们可以搜索PE查看器就能看到时间戳了。

       之前在网上搜索到了PEViewer工具,只要在该工具中打开二进制文件即可查看,如下所示:

点击NT头节点下的文件头节点,在右侧显示的信息中就可以看到时间戳。

       但这个工具在打开64位二进制文件会发生闪退,估计是不支持64位文件的。

3、使用EXE Explorer工具查看文件的时间戳

        后来在网上搜到了一个国外软件EXE Explorer,这个工具比较强大,一直都有人在维护升级。打开软件后,点击菜单栏的File->Open,打开目标文件即可查看文件的时间戳,如下所示:

其实这个工具能查看到PE头中的很多信息,仅仅查看时间戳有点大材小用了。

4、在Windbg中使用Windbg命令查看文件的时间戳

        我们在静态分析dump文件和使用Windbg进行动态调试(将WIndbg附加到目标进程上)时,都可以直接查看主程序加载的二进制模块的信息,其中就包括模块文件的时间戳。Windbg中提供了lm命令查看二进制文件的详细信息,以查看libcurl.dll库为例,具体的命令为:

lm vm libcurl*

其中vm是给命令指定的参数,v表示显示全部信息,m参数表示模糊匹配,是和后面的*号匹配符搭配的。

       使用该命令查看到模块信息如下:

一般我们在WIndng中查看线程的函数调用堆栈时,要看到具体的函数名和代码的行号,需要去找所在模块的pdb文件。我们一般先使用lm命令查看模块的时间戳,然后根据时间戳到文件服务器的指定目录中去找对应的pdb文件。

5、最后

       什么时候用PE工具去查看二进制文件的时间戳,什么时候用Windbg去查看,这个看具体的问题场景。本文简单地讲述了查看二进制文件时间戳的工具与方法,仅供参考。

猜你喜欢

转载自blog.csdn.net/chenlycly/article/details/130085431