• Lauterbach TRACE32使用技巧记录


    1. 按地址查看符号表

      y.list

    2. Linux显示用户进程调用栈

    一般情况下我们加载dump或者在线attach时只加载了Linux Kernel的符号表(vmlinux),此时只能看到内核空间的调用栈关系,如下图:

     如果想显示用户空间的调用栈关系,可以这么做:

    (1)点开菜单Linux->Display Processes,在任务列表里面找到当前的任务,点击右键选择Display Detailed,打开如下窗口:

     (2)在code file选项卡中可以看到:libuClibc的开始地址为0xb6dde000,其它库文件的地址也都一起列了出来;

     (3)加载dnsmasq主进程符号表 与 libuClibc 符号表

       data.load.elf E:RDTrace32511dnsmasq.elf /nocode /noclear  (dnsmasq.elf 文件编译时已包含偏移地址0x8000,此时不需要再指定偏移)

         data.load.elf E:RDTrace32511libuClibc-0.9.33.2.so 0xb6dde000 /nocode /noclear   (so文件为使用uClibc-0.9.33.2进行交叉编译后得到的elf文件)

      (4)一般情况下加载上面两项后即可以看到用户进程的调用栈关系,如果有的地址还是无法解析,可以进一步加载对应地址的库文件的符号表。

     3. Linux切换用户进程

    一般情况下我们加载dump或者在线attach后只能看到当前用户进程的调用栈信息,如果想看其他任务的调用栈关系,可以这么做:

    (1)点开菜单Linux->Display Processes,在任务列表里面找到当前的任务,点击右键选择Display Task Struct,打开如下窗口:

     (2)读取该进程的一级页表基地址即PGD,具体路径为(task_struct) ->mm->pgd,得到PGD的虚拟地址;

     (3)根据内核空间虚拟地址和物理地址的映射关系,将PGD转换为物理地址,例如映射关系为(0xc0000000<-->0x22300000),那么该PGD的物理地址为0x243e0000;

       (4)   将转换后的PGD 物理地址写入TTBR0的基地址段([31:10]):

          

    (5)  回到第一步的任务列表,右键点击要切换的目的任务,选择Switch Context, 此时就能看到该任务的调用栈关系:

     (6) 如果还要进一步查看用户空间的调用栈关系,可以继续按照 Linux显示用户进程调用栈 的方法进行实现。

  • 相关阅读:
    攻防世界WEB新手区第一题
    攻防世界WEB新手区第四题
    12月14
    12月12
    12月13
    centos关机重启命令
    解决docker容器内没有ip addr | ifconfig | ping命令
    Docker + Redis5.0.9集群搭建,3主3从(分片 + 高可用 + 负载均衡)
    docker创建自定义网络,容器内部使用容器名相互ping通,配置不同网段互通
    docker常用命令
  • 原文地址:https://www.cnblogs.com/DF11G/p/14511466.html
Copyright © 2020-2023  润新知