0

我正在尝试查找 .pdf、.doc、.docx 等文件的文件类型,但以编程方式不使用 shell 命令。实际上我必须制作一个应用程序来阻止访问特定扩展名的文件。我已经在 LKM 中连接了 sys_call_table,现在我希望在触发打开/读取系统调用时,我的 LKM 会检查文件类型。

我知道我们有一个当前指针,它可以访问当前进程结构,我们可以使用它来查找存储在 dentry 结构中的文件名,而且在 Linux 中,文件类型由存储在文件起始字节中的幻数标识。但我不知道如何找到文件类型以及它的确切存储位置?

4

2 回答 2

6

Linux 不会“存储”其文件的文件类型(与 Mac OS 的resource fork不同,我认为这是最知名的执行此操作的平台)。文件只是命名的字节流,它们没有操作系统暗示的结构。

要么您只是告诉程序要使用哪个文件(然后它按您说的做),要么程序使用更高级别的功能来解决它​​。

有一些程序可以重新发明这个特定的轮子(我负责其中一个),但你也可以使用例如file(1). 当然,这需要您的程序解析和“理解”您将获得的文本输出,这在某种意义上只会解决问题。

然而,我不认为file从内核空间调用是非常明智的,所以最好为你需要的任何类型重新创建测试,以保持它的小。

换句话说,我的意思是你应该简单地重新实现所需的测试。这通常是相当复杂的,所以如果你真的需要为尽可能多的类型做这件事,这可能不是一个好主意。:/

于 2013-02-05T12:48:18.143 回答
2

Actually i have to make an application which blocks access to files of a particular extension.

that's a flawed requirement. If you check by file extension, then you'll miss files that doesn't use the extension which is quite common in Linux since it does not use file extension.

The officially sanctioned way of detecting file type in Linux is by their magic number. The shell command file is basically just a wrapper for libmagic, so you have the option of linking to that library

于 2013-02-05T13:03:51.320 回答