原帖由 treul 于 2006-2-8 17:18 发表
我想,你的这种做法不具有通用性。也就是说,只有在操作你替换了调用以后的“那个文件”时,这个patch模块才起作用。
原帖由 viton_xuan 于 2006-2-8 09:29 发表
谢谢albcamus 斑竹的关注。
替换file_operations,打开一个文件(我打开的是/),得到该fs的file_operations指针,替换。
下面是代码。
int patch_vfs(const char* p)
{
struct file* filep;
filep = fil ...
原帖由 mq110 于 2006-2-9 09:47 发表
借个地儿 问个问题.
这样在VFS层拦截. 和自己导出syscall_table 然后修改系统调用然后替换有什么区别??
后者应该包含前者吧?
原帖由 albcamus 于 2006-2-9 10:22 发表
从sys_xxx拦截的话, 是比较高级别的, 以sys_open为例, 那时候还没有真正open, 我们只能通过操作文件名来做一些东西; VFS的话, 就是最底层的实现了, 这时候操作的是inode、dentry, 而不是文件名。
...
原帖由 albcamus 于 2006-2-8 18:20 发表
有通用性的。 你可以把函数指针指向的地址大印出来, 跟System.map或者/proc/kallsyms比对一下, 就看到那个地址代表一个通用的函数了。
原帖由 treul 于 2006-2-9 11:08 发表
我的意思是说,filp->f_op仅属于“该文件”本身,而实际上,filp->f_dentry->d_inode->i_fop则会通过filp_open() > dentry_open() > fops_get()向下传递给目录里的文件(正如你所做的那样 ...
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |