第四十一天:Linux内核栈

本文介绍了如何通过Linux内核栈获取thread_info,进一步得到task_struct指针,从而获取进程的各种信息。作者以编写获取当前进程名为例,详细解释了关键代码,包括如何从内核栈中定位thread_info结构体的地址,并利用它来输出进程名称。
摘要由CSDN通过智能技术生成
   linux3.5内核中为所有进程(包括内核进程和用户进程)分配8k或4k的内核栈(可以在内核编译的时候选择),在模块代码中分配的栈内存就是在内核栈中,写模块代码如果要在堆中分配内存,则要使用kmalloc或vmalloc来分配,这是后话。

  内核栈的栈底存放这thread_info, 通过获取内核栈,以得到thread_info的信息,thread_info里面有一个指向task_struct (进程描述符, 里面放着进程的各种信息)的指针, 通过这个指针, 就可以获取进程的各种信息了。

  

  先编写获取当前进程名的程序,来更好的了解内核栈。

 1 #include <linux/init.h>
 2 #include <linux/module.h>
 3 #include <asm/thread_info.h>
 4 #include <linux/sched.h>
 5 
 6 MODULE_LICENSE("GPL");
 7 MODULE_AUTHOR("BUNFLY");
 8 
 9 int test_init()
10 {
11         int i = 0;
12     
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值