- 主题:请教一个也许是初级的问题
我用了很多年Linux,但是对内核一直只有很粗浅的认识。下面这个需求,不知道有没有可能实现?
我需要截断对文件系统的访问,监控一些信息。这个功能是现有的,实现方式是嵌入在内核里发布。本来客户也能接受。
但现在客户经常需要升级内核,每升级一次,我们就需要根据他的版本,重新编译出一个版本,再让客户安装。客户很烦。
Linux内核是否允许注册一个hook,这个hook在kernel里只是一个空壳,仅仅是根据某个配置加载指定的一个库,后面的逻辑都在这个库里。这样的话,我就不用跟着kernel版本走了,这个库和这个配置文件留在那里即可。
请问有这个可能性吗?
谢谢!
--
FROM 222.128.36.*
有没有可以通过配置指定某种hernel hook加载某个库的办法啊?
如果是我加进去的hook,空壳的确也是要改内核,但是如果有现成的hook接口,通过配置呢,不就可以了么。
客户要装什么kernel,是我无法控制的。
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: 空壳的hook你不是一样要改内核?
: Linux有的是发布闭源binary的办法,你可以研究一下现在那些驱动怎么做的
--
FROM 125.34.17.*
这个完全解决不了我的问题啊。也许你还没明白我的问题。
【 在 rockyzhang (例如,每天爱你多一些) 的大作中提到: 】
: LD_PRELOAD
--
FROM 125.34.17.*
这个东西貌似很复杂,我仔细看看,目前还没搞明白,不知道能不能。
谢谢!
【 在 lcoudy (怕烫的猪) 的大作中提到: 】
: 你看看ebpf能不能实现你说的?
--
FROM 125.34.17.*
对不起,不太明白“进程调用syscall”和我的问题有什么关系?
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: Linux的话,你阻止不了进程调用syscall啊
: Windows的话因为微软不鼓励也不保证syscall的兼容性,你才可以hook win32 api。
--
FROM 125.34.17.*
如果你说的进程是指我编写的函数,这个我是有控制的啊。
而且也没明白与系统调用有什么关系。
我主要是监控文件系统。
我希望的行为是:
ioctl() {
actual_operations;
existed_fs_hook2;
}
existed_fs_hook2() {
get_conf
dlopen
dlsym
exec_myfunc
...
}
我希望kernel里已经写好了这么个existed_fs_hook2,里面会读指定的配置文件,然后去装载配置文件指定的库。
不知道有没有这样的已经在kernel里的机制。
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: 你不截获系统调用,那么进程直接自己放几个自陷指令怎么防?
--
FROM 125.34.17.*
客户不会自己编译的,就是下载了安装。我只能说,希望在主流的二进制发布里都有这个机制。
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: 内核里就算有这个机制,你怎么保证对方编译的时候选了呢?
--
FROM 222.128.36.*
看来所有建议都指向BPF了。我仔细学习一下。多谢各位!
--
FROM 222.128.36.*