首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System ()系统调用

System ()系统调用
EN

Stack Overflow用户
提问于 2014-02-13 16:42:07
回答 1查看 2K关注 0票数 3

我正在尝试编写一个get啮齿类()系统调用,以列出通过调用getdents()返回的所有目录条目,但我遇到了一个似乎无法解决的小问题,不确定这是否是C错误(因为我仍在学习它)或调用本身的一些内容。当我打印每个结构的d_name时,总是缺少目录/文件的第一个字母。

代码语言:javascript
复制
Feb 13 11:39:04 node35 kernel: [  911.353033] entry: ootkit.c
Feb 13 11:39:04 node35 kernel: [  911.353035] entry: ootkit.mod.c
Feb 13 11:39:04 node35 kernel: [  911.353036] entry: ootkit.ko

这些文件的名称是rootkit。

我的代码:

代码语言:javascript
复制
asmlinkage int new_getdents(unsigned int fd, struct linux_dirent64 *dirp, unsigned int     count)
{
    int nread;
    int bpos;
    struct linux_dirent64 *d;
    int (*orig_func)(unsigned int fd, struct linux_dirent64 *dirp, unsigned int count);
    t_syscall_hook *open_hook;

    open_hook = find_syscall_hook(__NR_getdents);
    orig_func = (void*) open_hook->orig_func;

    nread = (*orig_func)(fd, dirp, count);
    d = dirp;

    for (bpos = 0; bpos < nread;) {
      d = (struct linux_dirent64 *) ((char*)dirp + bpos);
      printk(KERN_INFO "%s\n", d->d_name);
      bpos += d->d_reclen;
    }

    return nread;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-13 17:34:13

我最好的猜测是,您混淆了getdents syscall的遗留版本和"64“版本。即使在64位系统上,似乎也有一个遗留版本(没有64位)编写一个缺少d_type成员的结构(因此,如果您使用现代的"64“版本的结构,名称的第一个字符将被误解为d_type成员)以及(正确的) getdents64 syscall。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21760212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档