微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么当我遍历android内核中的内核模块中的目录的dentry时,我无法正确提取所有的文件名?

@H_404_0@对于一个antirootkit学生项目,我想获得内核模块中给定目录的文件名列表。 我知道文件IO在内核空间通常是一个坏主意,但这是一个特例。

@H_404_0@我用filp_open来获取目录的struct file 。 有了这个,我有一个struct dentry ,其中包含d_subdirs ,它应该包含给定目录中的所有文件

@H_404_0@当我遍历列表并d_iname struct dentry所有d_iname (应该是struct dentry的短名称)时,都有非ASCII符号,并且缺less目录中的某些文件。 没有可以隐藏这些rootkit的rootkit。 dmesg输出如下所示:

@H_404_0@<6>Filename: đ @ Y android_module17.ko <6>Filename: < <6>Filename: < <6>Filename: < <6>Filename: < Ë android_module15.ko <6>Filename: < ؀ŋ android_module14.ko <6>Filename: < @Nj android_module13.ko <6>Filename: < <6>Filename: < ʋ k <6>Filename: < ؀̋ android_module11.ko <6>Filename: < @΋ android_module10.ko <6>Filename: < @ android_module9.ko <6>Filename: < <6>Filename: < android_module7.ko <6>Filename: <Ê؀ android_module6.ko <6>Filename: <Ċ @ android_module5.ko <6>Filename: <Ŋ <6>Filename: <Ɗ 10-__rttest <6>Filename: <NJ؀ __rttest <6>Filename: <Ȋ @ proctest.ko <6>Filename: <ʊ <6>Filename: <ˊ rt.ko <6>Filename: <̊؀ android_module4.ko <6>Filename: <͊ @ anmo.ko <6>Filename: < <6>Filename: Z LOST.DIR <6>Filename: ҉ @ Z Android

@H_404_0@有例如缺less的文件夹DCIM或名为android_module1.ko的文件。 我没有看到这些文件有什么特别之处。

@H_404_0@Java文件I / O性能随时间减less

@H_404_0@C ++中的asynchronous文件I / O

@H_404_0@无法使用Java在Windows中删除文件

@H_404_0@什么是检测文件是否在Windows中打开的编程方式?

@H_404[email protected]挂起

@H_404_0@这是我的内核模块的代码

@H_404_0@#include <linux/module.h> #include <linux/kernel.h> #include <linux/sched.h> #include <linux/fs.h> #include <linux/namei.h> #include <asm/uaccess.h> //replace the "" with angular brackets int init_module(void) { struct file * fi; printk(KERN_INFO "Hello android kernel...n"); fi = filp_open("/sdcard/",O_RDONLY,0); //struct path testpath = fi->f_path; struct dentry * thedentry; thedentry = fi->f_dentry; struct dentry * curdentry; unsigned char * curname = NULL; list_for_each_entry(curdentry,&thedentry->d_subdirs,d_subdirs) { curname = curdentry->d_iname; printk(KERN_INFO "Filename: %s n",curname); } filp_close(fi,NULL); return 0; } void cleanup_module(void) { printk(KERN_INFO "Goodbye android kernel...n"); }

@H_404_0@当我遍历列表时试图访问inode时,android崩溃。 我可以以这种方式列出所有文件吗?

@H_404_0@编辑:

@H_404_0@有趣的是,如果我尝试在循环中手动更正像这样的curdentry指针:

@H_404_0@testchar = (char *)curdentry; testchar = testchar + 8; curdentry = (struct dentry *)testchar; curname = curdentry->d_iname; testchar = (char *)curdentry; testchar = testchar - 8; curdentry = (struct dentry *)testchar;

@H_404_0@哇,这看起来很丑,但是随机符号已经消失了。 我只是没有看到这个指针不匹配来自哪里。 我是否正确使用列表function?

@H_404_0@在Windows上以事务方式写入文件更改

@H_404_0@检查在Linux和Windows中保存文件的进程

@H_404_0@什么原因导致WriteFile返回ERROR_ACCESS_DENIED?

@H_404_0@为什么我无法将所有数据从sys.stdin写入Windows中的文件

@H_404_0@我可以得到一个文件*由已经在内存中的数据支持

@H_404_0@您正在使用包含名称错误字段: d_iname只是一个缓冲区,用于保存可能不能用于大文件名的分配。 其实你在寻找d_name.name 。

@H_404_0@你也错误地遍历列表(我想知道如何从它得到任何结果)。 d_subdirs是列表的头 ,在list_for_each_entry()作为第二个参数使用,但在第三个参数中,应该放置节点 ,而不是在d_entry情况下是d_child字段(在较旧的内核中为d_child )的头。

@H_404_0@这是你的代码抛光后:

@H_404_0@struct file * fi; struct dentry * thedentry; struct dentry * curdentry; const char * curname = NULL; printk(KERN_INFO "Hello android kernel...n"); fi = filp_open("/root/",0); thedentry = fi->f_dentry; list_for_each_entry(curdentry,d_u.d_child) { curname = curdentry->d_name.name; printk(KERN_INFO "Filename: %s n",NULL);

@H_404_0@我在vanilla Linux 3.12上查了一下。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐