Nano Code扩展之获取进程task_struct结构体的信息

本文介绍了如何在Linux中通过调试器获取进程的task_struct结构体信息,包括利用链表结构遍历任务,使用Nano Code或WinDBG的GetExpressionEx、GetFieldValue、GetFieldOffset等API获取结构体字段数据。
摘要由CSDN通过智能技术生成

基本概念的说明

        在Linux中task_struct结构体内存储着进程的信息;在Nano Code或WinDBG中可以通过[dt task_struct]命令查看task_struct结构体中存储的信息,当然也可以通过[dt task_struct 地址]查看进程对应的task_struct结构体内存储的信息。

        list_head结构体是Linux中提供的双向循环链表;list_head结构体的定义在下方能看到。

struct list_head {

    struct list_head *next, *prev;

};

       进程的task_struct结构体都是由sched.h文件中的定义task_struct结构体虚拟出来的。

       如何通过一个进程的task_struct结构体找到另一个进程的task_struct结构体?这显然需要借助task_strcut结构体中的相关字段,在task_strcut结构体内的tasks字段完成了不同进程task_struct结构体间的相互链接。

        tasks字段通过list_head结构体所实现的双向循环链表使得进程task_struct结构体的地址一个接着一个的串联起来,最头上的是无疑是init进程的task_struct结构体init_task,在之后每新创建一个进程就会先虚拟出该进程的task_struct结构体,然后再把该task_struct结构体对应的地址插入链表当中,只要我们进行正向/反向遍历即可找出所有进程的task_struct结构体的地址,并根据这个地址获取相关信息。

杂项问题

       在给Nano Code编写插件,并且当我们需要从被调试系统中获取信息的话,需要使用到wdbgExts.h中定义的API,这些API的定义及说明可以在微软的官方文档中看到;关于符号相关的API的定义及说明,可以通过下方链接直达微软的官方文档页面。

https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/wdbgexts-symbols

       以Linux系统为例,如果我们需要获取task_struct结构体中的信息,那么是要向在Linux下编程一样导入相关的头文件吗,显然不能,如果我们这么样去导入的话,IDE会告诉你,你缺少一个又一个的头文件。这个过程会相当的繁琐且复杂(毕竟你还有找到它们),最重要的是,你还不一定能成功…………;因此我们应该去调用合适的API去解决问题。

GetExpressionEx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值