免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1292 | 回复: 3
打印 上一主题 下一主题

[文件系统] 内核中判断文件类型 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-09-22 16:35 |只看该作者 |倒序浏览
在用户空间可以用file命令来判断文件类型,那么如何在内核中判断文件的类型呢?
例如用户在执行命令的时候,内核中是否有相关函数或者结构体可以判断执行的这个命令是脚本还是二进制执行文件?

论坛徽章:
13
程序设计版块每日发帖之星
日期:2016-06-29 06:20:00每日论坛发贴之星
日期:2016-08-14 06:20:00操作系统版块每日发帖之星
日期:2016-08-14 06:20:00每日论坛发贴之星
日期:2016-08-13 06:20:00数据库技术版块每日发帖之星
日期:2016-08-13 06:20:00程序设计版块每日发帖之星
日期:2016-08-13 06:20:00IT运维版块每日发帖之星
日期:2016-08-13 06:20:00每日论坛发贴之星
日期:2016-08-12 06:20:00数据库技术版块每日发帖之星
日期:2016-08-12 06:20:00程序设计版块每日发帖之星
日期:2016-08-12 06:20:00操作系统版块每日发帖之星
日期:2016-08-12 06:20:00综合交流区版块每日发帖之星
日期:2016-08-09 06:20:00
2 [报告]
发表于 2016-09-22 17:56 |只看该作者
"那么如何在内核中判断文件的类型呢?"
应该表述成”内核是如何判断文件类型“吧。
这是do_execve的本职工作。
通常可执行文件的前几个字节都是”魔数”,像java是'c','a','f','e'。 ELF文件是 '0x7f', 'e', 'l', 'f'。 脚本是我们熟悉的'#','!'。
execve会根据magic number找到相应的loader,找不到就是-NOEXEC。
脚本的处理比较特殊,是找到"#","!"后面的那个路径指向的解释器(通常是个ELF的二进制文件),然load那个解释器,并把脚本名作为参数传给它。

参见《linux内核情景分析》P313前后。

论坛徽章:
2
2016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之广夏
日期:2016-12-07 08:32:11
3 [报告]
发表于 2016-09-22 19:55 |只看该作者
回复 2# karma303

看来操哥的书到什么时候都不过时

论坛徽章:
0
4 [报告]
发表于 2016-09-23 11:07 |只看该作者
回复 2# karma303

那如果脚本开头没有写"!#/bin/bash"这样的信息,内核如何确认该文件是脚本文件,该调用什么解析器呢
我现在想做到的功能是当用户执行某个程序时,内核先判断是执行的脚本还是二进制文件,然后再进行后续处理。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP