V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
g0t3n
V2EX  ›  问与答

想问问各位,有试过在linux 用户态中使用内核态的数据结构吗?

  •  
  •   g0t3n · 2013-10-10 23:53:26 +08:00 · 3014 次点击
    这是一个创建于 3877 天前的主题,其中的信息可能已经有所发展或是发生改变。
    好吧这个需求好像有点诡异,不过最近在折腾着。写一个普通的用户态程序,需要用到内核态的 struct thread_info,struct cred,struct task_struct。第一个想法是dirty hack一下,把需要的data struct 提取出来,但发现每个数据结构内部又各种包含别的数据结构,所以放弃了。想问下各位,有什么办法解决没? 就像写 makefile 那样,貌似可以make的时候直解决里面的依赖问题? 求指点
    5 条回复    1970-01-01 08:00:00 +08:00
    node
        1
    node  
       2013-10-11 13:54:42 +08:00
    没明白你要做什么,如果把指针引用也算上然后一路推下去的话,thread_info、task_struct几乎可以把内核所有的数据结构类型连根拔起了
    allenforrest
        2
    allenforrest  
       2013-10-11 14:31:50 +08:00
    mmap映射一下,然后把内核的头文件在用户态程序里引用,直接访问mmap的内存?
    g0t3n
        3
    g0t3n  
    OP
       2013-10-11 18:22:52 +08:00
    @node 这个实现说出来估计很难解释,文字功底不好你懂得。其实是有了一块内存的 raw 数据,然后通过 thread_info => task_struct => cred 查到类似的值。其实数据结构都是死的,可想到比较简单的解法是写一个 lkm 来printk计算出其偏移值,但这样子并不优雅,所以我希望有个比较好的方法来在普通用户层编译的时候引用内核的那几个头文件~~
    g0t3n
        4
    g0t3n  
    OP
       2013-10-11 18:24:18 +08:00
    @allenforrest 额,貌似我的需求没说清楚,我是在写用户层的小程序,只是用到内核中的几个数据结构,有什么办法能在编译的时候自动解决依赖关系吗?
    node
        5
    node  
       2013-10-11 20:32:34 +08:00
    把内核态代码洗成用户态代码我个人感觉不靠谱,有这功夫你还是写个程序把需要的具体变量一个一个传到用户态吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1253 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:09 · PVG 02:09 · LAX 11:09 · JFK 14:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.