【发布时间】:2013-01-20 09:28:31
【问题描述】:
我正在尝试查找 .pdf、.doc、.docx 等文件的文件类型,但以编程方式不使用 shell 命令。实际上我必须制作一个应用程序来阻止访问特定扩展名的文件。我已经在 LKM 中连接了 sys_call_table,现在我希望在触发打开/读取系统调用时,我的 LKM 会检查文件类型。
我知道我们有一个当前指针,它可以访问当前进程结构,我们可以使用它来查找存储在 dentry 结构中的文件名,并且在 Linux 中,文件类型由存储在起始字节中的幻数标识文件。但我不知道如何找到文件类型以及它的确切存储位置?
【问题讨论】:
-
为什么要重新发明轮子?只需致电file(或查看其源代码)。
-
有简单的方法和困难的方法。最简单的方法是使用
system()调用file,或者只是根据文件扩展名进行猜测。困难的方法是重新发明file:解析文件并根据内容确定其类型。 -
但是我在 c/c++ 中找到了文件类型。你能给出一个使用 system() 调用的代码示例吗?
-
不,我不是假设每个文件都有扩展名,因为在 Linux 中扩展名没有意义。因此文件类型由存储在文件内容开头的幻数标识
-
@RamizRaja “幻数”不是一个准确的描述,它是简写。这意味着来自文件本身的数据。例如,PNG 图像文件以an 8-byte header 开头,您当然可以很容易地找到它。
标签: c linux linux-kernel