linux-kernel – 在Linux中,我如何从“struct file”结构中获取文件名,同时通过kgdb执行内核?

linux-kernel – 在Linux中,我如何从“struct file”结构中获取文件名,同时通过kgdb执行内核?,第1张

概述我正在尝试通过kgdb查看文件名,因此我无法调用函数和宏来以编程方式获取它.我需要通过手动检查数据结构来找到它. 就像我在gdb中有一个断点一样,我怎么能用gdb环顾四周找到文件名呢? 我试过在filp.f_path,filp.f_inode等处查看.我无法在任何地方看到文件名. ssize_t do_sync_write(struct file *filp, const char __user 我正在尝试通过kgdb查看文件名,因此我无法调用函数和宏来以编程方式获取它.我需要通过手动检查数据结构来找到它.

就像我在gdb中有一个断点一样,我怎么能用gdb环顾四周找到文件名呢?

我试过在filp.f_path,filp.f_inode等处查看.我无法在任何地方看到文件名.

ssize_t do_sync_write(struct file *filp,const char __user *buf,size_t len,loff_t *ppos){     struct iovec iov = { .iov_base = (voID __user *)buf,.iov_len = len };     struct kiocb kiocb;     ssize_t ret;     init_sync_kiocb(&kiocb,filp);     kiocb.ki_pos = *ppos;     kiocb.ki_left = len;     kiocb.ki_nbytes = len;     ret = filp->f_op->aio_write(&kiocb,&iov,1,kiocb.ki_pos);     if (-EIOCBQUEUED == ret)             ret = wait_on_sync_kiocb(&kiocb);     *ppos = kiocb.ki_pos;     return ret;}
解决方法 在linux内核中,文件结构本质上是内核“看到”文件的方式.内核对文件名不感兴趣,只对打开文件的inode感兴趣.这意味着丢失了对用户重要的所有其他信息.

编辑:这个答案是错误的.您可以使用filp-> f_path.dentry获取dentry.从那里,您可以使用相关的FS标志获取dentry的名称或完整路径.

总结

以上是内存溢出为你收集整理的linux-kernel – 在Linux中,我如何从“struct file”结构中获取文件名,同时通过kgdb执行内核?全部内容,希望文章能够帮你解决linux-kernel – 在Linux中,我如何从“struct file”结构中获取文件名,同时通过kgdb执行内核?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:http://outofmemory.cn/yw/1047974.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存