我在内核中编写了一段代码,可以获取其他二进制文件的时间戳。按时间戳,我的意思是编译二进制文件的时间。
有没有办法获取这些信息?
当我们执行ls -l时,时间戳在用户空间中可用。理想情况下,它应该嵌入在elf文件中的某些位置。我怎样才能得到这条信息?
提前致谢。
-Gomathi
答案 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) ...)。避免为这些事情修补内核。