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

2013-10-10 23:53:26 +08:00
 g0t3n
好吧这个需求好像有点诡异,不过最近在折腾着。写一个普通的用户态程序,需要用到内核态的 struct thread_info,struct cred,struct task_struct。第一个想法是dirty hack一下,把需要的data struct 提取出来,但发现每个数据结构内部又各种包含别的数据结构,所以放弃了。想问下各位,有什么办法解决没? 就像写 makefile 那样,貌似可以make的时候直解决里面的依赖问题? 求指点
3120 次点击
所在节点    问与答
5 条回复
node
2013-10-11 13:54:42 +08:00
没明白你要做什么,如果把指针引用也算上然后一路推下去的话,thread_info、task_struct几乎可以把内核所有的数据结构类型连根拔起了
allenforrest
2013-10-11 14:31:50 +08:00
mmap映射一下,然后把内核的头文件在用户态程序里引用,直接访问mmap的内存?
g0t3n
2013-10-11 18:22:52 +08:00
@node 这个实现说出来估计很难解释,文字功底不好你懂得。其实是有了一块内存的 raw 数据,然后通过 thread_info => task_struct => cred 查到类似的值。其实数据结构都是死的,可想到比较简单的解法是写一个 lkm 来printk计算出其偏移值,但这样子并不优雅,所以我希望有个比较好的方法来在普通用户层编译的时候引用内核的那几个头文件~~
g0t3n
2013-10-11 18:24:18 +08:00
@allenforrest 额,貌似我的需求没说清楚,我是在写用户层的小程序,只是用到内核中的几个数据结构,有什么办法能在编译的时候自动解决依赖关系吗?
node
2013-10-11 20:32:34 +08:00
把内核态代码洗成用户态代码我个人感觉不靠谱,有这功夫你还是写个程序把需要的具体变量一个一个传到用户态吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/85172

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX