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文件。