内核中判断文件类型
在用户空间可以用file命令来判断文件类型,那么如何在内核中判断文件的类型呢?例如用户在执行命令的时候,内核中是否有相关函数或者结构体可以判断执行的这个命令是脚本还是二进制执行文件?
"那么如何在内核中判断文件的类型呢?"应该表述成”内核是如何判断文件类型“吧。
这是do_execve的本职工作。
通常可执行文件的前几个字节都是”魔数”,像java是'c','a','f','e'。 ELF文件是 '0x7f', 'e', 'l', 'f'。 脚本是我们熟悉的'#','!'。
execve会根据magic number找到相应的loader,找不到就是-NOEXEC。
脚本的处理比较特殊,是找到"#","!"后面的那个路径指向的解释器(通常是个ELF的二进制文件),然load那个解释器,并把脚本名作为参数传给它。
参见《linux内核情景分析》P313前后。
回复 2# karma303
看来操哥的书到什么时候都不过时
回复 2# karma303
那如果脚本开头没有写"!#/bin/bash"这样的信息,内核如何确认该文件是脚本文件,该调用什么解析器呢
我现在想做到的功能是当用户执行某个程序时,内核先判断是执行的脚本还是二进制文件,然后再进行后续处理。
页:
[1]