ITPub博客

首页 > 自动化运维 > > 调试KERNEL时,找出当前进程信息的方法

调试KERNEL时,找出当前进程信息的方法

作者:飘絮絮絮丶 时间:2020-05-18 15:53:42 0 删除 编辑

我们知道,一个常用的内核数据结构叫做 current. 它指向当前的进程,包括很多有用的信息,比如PID, 进程名等。如果是自己写内核代码,那么可以直接引用current。 但是如果是调试的话,直接在GDB里p current是不行的。因为current是一个宏。

那么这时如何找出current呢?在Linux 2.6版本中,current是放在堆栈(STACK)的最低下。假如内核栈是8K。起始地址为0XC100,2000. 那么current就在0XC100,0000 (堆栈是倒着长的). 根据这个情况,可以用如下方法找出current。 
1)找出ESP。p $esp. 假设输出为0XC123,4566
2) 把esp与上0XFFFF,E000 (低13位置为0)。 得到0XC123,4000. 这个值就是CURRENT的值了。可以转换后进行使用,比如
3)  p ((* struct thread_info) 0xc1234000)->task->comm 

以上方法在X86-32, ARM上都可以。 其他体系结构不太清楚,似乎也可以。或者那位知道的可以补充。 

文章来源CU社区:调试KERNEL时,找出当前进程信息的方法


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3152945/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-09-09

  • 博文量
    2646
  • 访问量
    42169