Lauterbach TRACE32技巧小集

1. TRACE32中实现类container_of功能

假设现在我只知道一个全局变量成员tv2的地址,类型是tvec_base。我想知道这个全局变量的地址怎么办?

struct tvec_base {
    spinlock_t lock;
    struct timer_list *running_timer;
    unsigned long timer_jiffies;
    unsigned long next_timer;
    struct tvec_root tv1;
    struct tvec tv2;
    struct tvec tv3;
    struct tvec tv4;
    struct tvec tv5;
} ____cacheline_aligned;

1.1 计算tv2到结构体头的偏移量:&((struct tvec_base*)0x0)->tv2

可以得出tv2到结构体头的偏移量是0x080C

1.2 已知tv2的地址是0xC065C0CC,此地址减去偏移量就是tvec_bases的地址:(struct tvec_base *)(0xC065C0CC-0x080C)

如下就dump出了tvec_bases这个变量的内容。

2. 将内核变量导出到本地文件,如log_buf

2.1 首先找到Linux内核存放log的变量log_buf地址

2.2 执行data.SAVE.Binary D:log.bin 0xC064B6AC++0x10000,dump从0xC064B6AC开始大小为0x10000一段内存到D:log.bin中。

可以使用工具打开D:log.bin文件。

原文地址:https://www.cnblogs.com/arnoldlu/p/7214270.html