最近,我使用 轉儲了我的記憶體字串(只是因為我可以)sudo cat /dev/mem | strings
。在查看這個轉儲後,我注意到一些非常有趣的事情:
.symtab
.strtab
.shstrtab
.note.gnu.build-id
.rela.text
.rela.init.text
.rela.text.unlikely
.rela.exit.text
.rela__ksymtab
.rela__ksymtab_gpl
.rela__kcrctab
.rela__kcrctab_gpl
.rela.rodata
.rodata.str1.8
.rela__mcount_loc
.rodata.str1.1
.rela__bug_table
.rela.smp_locks
.modinfo
__ksymtab_strings
.rela__tracepoints_ptrs
__tracepoints_strings
__versions
.rela.data
.data.unlikely
.rela__verbose
.rela__jump_table
.rela_ftrace_events
.rela.ref.data
.rela__tracepoints
.rela.gnu.linkonce.t6
這些行似乎都以某種方式相關:它們在記憶體中都(非常)靠近,它們都有相似的.<name>
前綴,而且它們似乎都互相引用。
什麼會導致這些字串出現,為什麼?
答案1
+1 @jos 上面所說的(「Google它」)。在這種特殊情況下,您應該刪除“.rela_”和“_gpl”部分。你會發現這些是內核符號。 「rela」是「relocation」的縮寫,與 ELF 檔案格式有關。這些都是有趣的話題,我鼓勵您進一步研究它們。
答案2
這些看起來非常像 Linux 核心中的節名稱。以 .rela 為前綴的包含指定節的重定位訊息,例如 .rela.text 是文字節(儲存核心物件程式碼的地方)的重定位訊息。
其他感興趣的部分是:
- .modinfo - 核心模組訊息
- .rela.__ksymtab - 核心符號表重定位表
- .rela.data - 核心資料部分重定位表
- rodata.str1.1 - 唯讀字串資料部分
等等。
在 /dev/mem 上運行字串只會在系統實體記憶體中找到有趣的字串;因此,您設法在未壓縮的 vmlinuz Linux 核心中找到一些字串。