免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2219 | 回复: 6
打印 上一主题 下一主题

[内核入门] 怎样调试进程的内核态数据结构? [复制链接]

论坛徽章:
11
摩羯座
日期:2013-09-29 17:39:09白羊座
日期:2014-11-13 09:38:14技术图书徽章
日期:2014-01-17 15:07:36狮子座
日期:2013-12-25 14:01:52技术图书徽章
日期:2013-12-17 11:33:22技术图书徽章
日期:2013-12-03 10:27:57天秤座
日期:2013-11-08 15:47:19申猴
日期:2013-10-29 13:16:32未羊
日期:2013-10-12 22:28:56辰龙
日期:2013-10-09 14:39:5515-16赛季CBA联赛之山东
日期:2016-07-25 10:23:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-09-27 15:35 |只看该作者 |倒序浏览
例如,对于一个程序
  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>

  4. int main(int argc, char *argv[])
  5. {
  6.     int fd;
  7.     fd = open("/root/test", O_RDWR | O_CREAT, S_IRWXU);

  8.     return 0;
  9. }
复制代码
编译为elf可执行程序后,通过怎样的调试可以查看到内核分配文件描述符的情况,如task_struct, struct fdtable, struct file 等数据结构在运行时的调用过程?
PS:不是嵌入式Linux,而是安装在pc上的x86 linux

请各位不吝赐教

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
2 [报告]
发表于 2014-09-27 17:10 |只看该作者
写个KO,通过PID把它的task_struct找出来,就什么都有了。你想找了解分配它们的流程,可以先通过代码阅读,理解代码的大概流程,再在代码里添加打印就可以。
如果想和GDB一样用得爽,就用qemu+gdb直接调试内核。
另外,ftrace提供了第二个了解内核函数调用情况的工具,详情请看:http://www.ibm.com/developerworks/cn/linux/l-cn-ftrace2/

至于那种适合你,就算你自己多多试试了。

论坛徽章:
11
摩羯座
日期:2013-09-29 17:39:09白羊座
日期:2014-11-13 09:38:14技术图书徽章
日期:2014-01-17 15:07:36狮子座
日期:2013-12-25 14:01:52技术图书徽章
日期:2013-12-17 11:33:22技术图书徽章
日期:2013-12-03 10:27:57天秤座
日期:2013-11-08 15:47:19申猴
日期:2013-10-29 13:16:32未羊
日期:2013-10-12 22:28:56辰龙
日期:2013-10-09 14:39:5515-16赛季CBA联赛之山东
日期:2016-07-25 10:23:00
3 [报告]
发表于 2014-09-27 17:26 |只看该作者
回复 2# Tinnal
感谢楼上,ftrace小弟粗略了解了一下,貌似只能显示到function与function_graph级别

KO,LKM?共享动态库?
gdb+qemu?
小弟菜鸟,不明觉厉

不过总算提供了思路。非常感谢
   

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
4 [报告]
发表于 2014-09-27 19:09 |只看该作者
回复 3# superwujc

不明觉厉

你上得内核源码这个版,就不能这么去说,不懂就去学。如果你没有这种愿意,请把你这贴发到C/C++版。
   

论坛徽章:
11
摩羯座
日期:2013-09-29 17:39:09白羊座
日期:2014-11-13 09:38:14技术图书徽章
日期:2014-01-17 15:07:36狮子座
日期:2013-12-25 14:01:52技术图书徽章
日期:2013-12-17 11:33:22技术图书徽章
日期:2013-12-03 10:27:57天秤座
日期:2013-11-08 15:47:19申猴
日期:2013-10-29 13:16:32未羊
日期:2013-10-12 22:28:56辰龙
日期:2013-10-09 14:39:5515-16赛季CBA联赛之山东
日期:2016-07-25 10:23:00
5 [报告]
发表于 2014-09-27 22:52 |只看该作者
回复 4# Tinnal
非常感谢


   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
6 [报告]
发表于 2015-09-14 23:45 |只看该作者
本帖最后由 shihyu 于 2015-09-14 23:45 编辑

写个KO,通过PID把它的task_struct找出来  <--- 通过KO的 PID 找出对应的 task_struct ?

谢谢

论坛徽章:
0
7 [报告]
发表于 2015-09-15 09:35 |只看该作者
写个linux内核模块,也就是上面人说的ko。可以遍历进程链表init_tasks,然后打印struct task_struct类型对应的字段(也可以通过pid找某个进程结构体),你去研究struct task_struct结构体就可以知道进程打开哪些文件(files_struct),具体怎么通过字段去获取,你可以下载一个版本的linux内核源码,去研究内核是怎么操作哪些字段的。这些程序你在网上搜都可以找到的。通过这个,你可以了解内核很多东西。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP