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 struct thread_info *p =

 
                   
                   
                   
                   本文介绍了如何通过Linux内核栈获取thread_info,进一步得到task_struct指针,从而获取进程的各种信息。作者以编写获取当前进程名为例,详细解释了关键代码,包括如何从内核栈中定位thread_info结构体的地址,并利用它来输出进程名称。
本文介绍了如何通过Linux内核栈获取thread_info,进一步得到task_struct指针,从而获取进程的各种信息。作者以编写获取当前进程名为例,详细解释了关键代码,包括如何从内核栈中定位thread_info结构体的地址,并利用它来输出进程名称。
           最低0.47元/天 解锁文章
最低0.47元/天 解锁文章
                           
                       
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   659
					659
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            