Linux   发布时间:2022-05-08  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了linux – 了解从进程内核堆栈获取task_struct指针大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_403_4@
现在我正在阅读Robert Love撰写的“ Linux内核开发3D版”一书.在那里他写了关于thread_info结构,其中包含指向task_struct结构的指针,据我所知,它位于进程内核堆栈的底部或顶部(取决于体系结构).直到最近我才熟悉Linux内核API,并且我不知道current()方法的存在.本书的摘录与current()方法的实际工作方式有关:

我的问题是:

>据我所知,如果我们将十进制值表示为一组位,那么集合中只有一个最低有效位,不是吗?
>什么是神奇的数字13?

对于将阅读本主题的人,我所提出的问题可以得出结论,即作者不能正确理解内存分配和管理的过程.好吧,这可能是正确的,因为在我看来,我可以将为堆栈分配的内存表示为带满位(或字节).所有这些字节都可以通过特定的存储器地址访问,表示为一些十进制值.堆栈的原点是最低的内存地址,堆栈的fin是内存地址的最高值.但是,我们如何才能获得指向位于堆栈末端的thread_info结构的指针,只需通过屏蔽13个位于堆栈指针的ARBITRARY的最低有效位(如果我理解正确的话,我们屏蔽掉了堆栈指针ADDRESS表示为十进制值).

@H_403_4@

解决方法

内核堆栈顶部包含一个特殊的结构– thread_info:

26 struct thread_info {
 27         struct task_struct      *task;          /* main task structure */
 28         struct exec_domain      *exec_domain;   /* execution domain */
 29         __u32                   flags;          /* low level flags */
 30         __u32                   status;         /* thread synchronous flags */
 31         __u32                   cpu;            /* current cpu */
 32         int                     preempt_count;  /* 0 => preemptable,33                                                    <0 => BUG */
 34         mm_segment_t            addr_limit;
 35         struct restarT_Block    restarT_Block;
 36         void __user             *sysenter_return;
 37 #ifdef CONfig_X86_32
 38         unsigned long           prevIoUs_esp;   /* ESP of the prevIoUs stack in
 39                                                    case of nested (IRQ) stacks
 40                                                 */
 41         __u8                    supervisor_stack[0];
 42 #endif
 43         unsigned int            sig_on_uaccess_error:1;
 44         unsigned int            uaccess_err:1;  /* uaccess Failed */
 45 };

因此,要获取task_struct,您需要从ASM代码获取带有GET_THREAD_INFO的thread_info指针:

183 /* how to get the thread information struct from ASM */
184 #define GET_THREAD_INFO(reg)     \
185         movl $-THREAD_SIZE,reg; \
186         andl %esp,reg

…或者使用C代码中的current_thread_info:

174 /* how to get the thread information struct from C */
175 static inline struct thread_info *current_thread_info(void)
176 {
177         return (struct thread_info *)
178                 (current_stack_pointer & ~(THREAD_SIZE - 1));
179 }

注意,对于x86_32和x86_64,定义为(PAGE_SIZE<<< THREAD_SIZE_ORDER)和THREAD_SIZE_ORDER的THREAD_SIZE等于1,因此THREAD_SIZE导致8192(2 ^ 13或1 <<<<<<< 13).

@H_403_4@ @H_403_4@
@H_403_4@
@H_403_4@
本图文内容来源于网友网络收集整理提供,作为学习参使用,版权属于原作者。
编程之家官方1群(满)
编程之家官方2群(满)
编程之家官方3群(满)
编程之家官方4群
编程之家官方5群(新)
  • 上一篇:Linux上的Python中不存在os.O_EXLO下一篇:bittorrent – 如何在rtorrent或其

猜你在找的Linux相关文章

Linux命令入门篇(二)
学习是一场漫长的过程,所谓好记性不如烂笔头,记录下学习的点滴内容,才可以温故而知新。本文主要是Linux命令的权限相关知识梳理,仅供学习分享使用,如有不足之处还请指正
Linux命令入门篇(三)
在Linux命令行模式下,通常采用vi或者vim命令进行文件的编辑,本文通过一个简单的小例子,简述如何使用vi / vim 进行文件的编辑和保存。
linux如何开启root权限
linux如何开启root权限
linux中误删了文件怎么恢复
linux中误删了文件怎么恢复
如何关闭linux
如何关闭linux
linux怎么看系统版本
linux怎么看系统版本
linux如何更新系统
linux如何更新系统
linux vim怎样不保存退出
linux vim怎样不保存退出
@H_874_186@
LinuxWindowsCentOSUbuntuNginxWebserviceScalaMemcacheApacheredisDockerBashAzuretomcatLNMPSHellAnsible数据结构宝塔面板服务器运维网络安全
  • • Linux命令入门篇(二)
  • • Linux命令入门篇(三)
  • • Linux命令入门篇(一)
  • • linux如何开启root权限
  • • linux中误删了文件怎么恢复
  • • linux与windows文件显示乱码
  • • 如何关闭linux
  • • linux怎么看系统版本
  • • linux查看系统有哪些用户
  • • linux如何更新系统
  • • linux vim怎样不保存退出
  • • linux的端口不通怎么解决

linux – 了解从进程内核堆栈获取task_struct指针

微信公众号搜 "程序精选"关注
  • • linux与windows下如何安装Imag
  • • 深入了解Linux中的copy_{to, f
  • • 使用rpm删除包的正确姿势
  • • 详解xsHell是如何连接linux(图
  • • linux php 5.4安装教程
  • • linux如何查看登录日志
  • • linux下配置网络参数有哪两种方
  • • 软链接与硬链接有什么区别
  • • 创建目录、文件及复制文件各用
  • • Linux系统下如何解压zip文件
编程问答discordterraformjenkins-pirestapikubernetesgoogle-kubamazon-iamamazon-ecsamazon-eksesp32kuberneteskubectlnginx-revejenkins-pldocker-swaelastic-sthypercv2gitlab-ci-google-cloxgboostdigital-ocprismagcloudhyperledgemsalnginx-ingrstatabazelnetcdfcicdwso2-AMMinikubevalueerrorapi-gatewaslurmzfsbitcoingensimbitbucket-gposplunkvimrctensorboardocker-regpywin32pgadmin-4google-clohyperledgegit-submodcentos6.7gatlinganaconda3centos6.6sensorsamazon-ecrjoltnodemonpyaudiomodulenotfsmbdocker-volsubdirectohashicorp-centos8docker-desi2ccentos7.0envoyproxypyenvcentos6.xwsusdocker-conlmifconfignerdtreekongmysql5.6bitbake

大佬总结

以上是大佬教程为你收集整理的linux – 了解从进程内核堆栈获取task_struct指针全部内容,希望文章能够帮你解决linux – 了解从进程内核堆栈获取task_struct指针所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:据我所知