识别内核空间中二进制文件的编译时间

时间:2014-07-16 04:13:52

标签: linux linux-kernel kernel linux-device-driver kernel-module

我在内核中编写了一段代码,可以获取其他二进制文件的时间戳。按时间戳,我的意思是编译二进制文件的时间。

有没有办法获取这些信息?

当我们执行ls -l时,时间戳在用户空间中可用。理想情况下,它应该嵌入在elf文件中的某些位置。我怎样才能得到这条信息?

提前致谢。

-Gomathi

1 个答案:

答案 0 :(得分:3)

二进制文件的编译时间不可用(除非它是用C或C ++编码并使用__DATE____TIME__预定义的预处理器宏。)

AFAIK,ELF规范默认不存储任何时间戳(如果有,则可能是strip - ed)。

ls -l(以及stat(1)命令)给出的是stat(2)系统调用给出的一些元数据(由文件系统保存);您可能希望st_mtime(或st_mtim作为timespec)字段,给出文件的最后修改时间。但是,例如,cp的ELF文件会将当前时间st_mtime提供给新副本。

但ELF可执行文件的st_mtime字段是链接器(或其他内容,如cp)编写该可执行文件的时间(因此它与链接时间的关系比与编译时间。)

要在内核中检索它,请查看可执行文件的内核inode(可能在VFS中)

你没有陈述你的真实目标,但我猜他们可以(并且应该)在用户土地上完成(查看acct(2)& inotify(7) ...)。避免为这些事情修补内核。