簡體   English   中英

什么是__ksymtab? 在linux內核中

[英]what is __ksymtab? in linux kernel

當我們cat'proc / kallsyms'或'system.map'時,我們會得到這樣的符號

....
c033718c T nf_hook_slow
c04ca284 r __ksymtab_nf_hook_slow
c04ca28c r __ksymtab_nf_hooks
c04d24a0 r __kcrctab_nf_hook_slow
c04d24a4 r __kcrctab_nf_hooks
c04e9122 r __kstrtab_nf_hook_slow
c04e9179 r __kstrtab_nf_hooks
c054d854 D nf_hooks
c0571ca0 d nf_hook_mutex
....
  1. T,r,D,d東西是什么意思?
  2. 我可以在內核源代碼中找到EXPORT_SYMBOL(...)中的符號,但還有其他前綴為__ksymtab ...或__kstrtab ...這些是什么?
  3. 是否有可能在System.map中有符號但在/ proc / kallsyms中被排除? (假設內核編譯正確)
  4. 我有netfilter啟用linux內核,但我找不到符號'nf_hooks',但有'__ksymtab_nf_hook'。 有沒有辦法使用__ksymtab_nf_hook獲取nf_hooks的地址?
  5. 我在我的linux源代碼EXPORT_SYMBOL(nf_hook)中看到,但是如果我'cat / proc / kallsyms'我就找不到它。 這有什么典型的原因嗎?

先感謝您。

  1. 格式類似於nm實用程序輸出格式,另請參見此頁面

    簡單來說,'T'通常表示全局(非靜態但不一定是導出的)函數,'t' - 編譯單元本地的函數(即靜態),'D' - 全局數據,'d' - 編譯單元的本地數據。 'R'和'r' - 與'D'/'d'相同,但是對於只讀數據。

  2. 這些是導出符號所需的特殊部分中的項目,以便內核模塊可以使用這些符號。

    對於每個導出的符號, EXPORT_SYMBOL()至少定義以下內容:

    • __kstrtab_<symbol_name> - 作為字符串的符號名稱
    • __ksymtab_<symbol_name> - 包含符號信息的結構:其地址, __kstrtab_<symbol_name>地址等。
    • __kcrctab_<symbol_name> - 符號的控制和(CRC)的地址 - 例如,它用於檢查內核或模塊是否提供給定內核模塊所需的完全相同的符號。 如果模塊需要具有給定名稱和CRC的符號,並且內核提供具有該名稱但具有不同CRC的符號(例如,如果模塊是針對不同的內核版本編譯的),則模塊加載器將拒絕加載該內核模塊(除非禁用此檢查)。

    有關詳細信息,請查看linux / export.hEXPORT_SYMBOL()宏的實現。

  3. 不確定,但到目前為止,當System.map中存在函數(“文本符號”)或變量(“數據符號”)但在/ proc / kallsyms中未顯示(如果內核編譯正確並且完全啟用kallsyms(CONFIG_KALLSYMS = y,CONFIG_KALLSYMS_ALL = y)。 如果CONFIG_KALLSYMS_ALL = n,則只有函數(確切地說,來自* .text部分的符號)將顯示在/ proc / kallsyms中。

  4. 取決於您的內核版本。 您可以查看內核的EXPORT_SYMBOL()定義,並找到__ksymtab_<symbol_name>變量的類型。 在內核3.11中,它是linux / export.h中定義的struct kernel_symbol kernel_symbol 有了該結構的定義及其地址,我想,你可以得到符號的地址: struct kernel_symbol::value 雖然我自己沒試過。

    但請注意, __ksymtab_nf_hook適用於nf_hook但不適用於nf_hooks 名稱必須匹配。 nf_hooksnf_hook是不同的實體。

  5. 很難說沒有看到代碼和/ proc / kallsyms的相關部分。 也許它是#ifdef'ed並且根本沒有編譯,可能還有別的東西。

    此外, nf_hooks是一個數據項,因此如果CONFIG_KALLSYMS_ALL為'n',它可能不會出現在/ proc / kallsyms中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM