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

Lauterbach TRACE32技巧小集

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

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

Lauterbach TRACE32技巧小集

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

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

Lauterbach TRACE32技巧小集

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

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

Lauterbach TRACE32技巧小集

上一篇:Linux学习之CentOS(一)--CentOS6.4环境搭建


下一篇:Android Drawable