linux核心符號表

2021-06-29 00:54:46 字數 1837 閱讀 8059

所謂核心符號表就是在核心內部函式或變數中可供外部引用的函式和變數的符號表。在 2.6 核心下,使用以下命令可以看到核心符號表:

引用

beyes@linux-beyes:/> cat /proc/kallsyms | more

c0100000 t _text

c0100000 t startup_32

c0100054 t default_entry

c01000b0 t startup_32_smp

c0100132 t checkcputype

c01001b3 t is486

c01001ba t is386

c0100227 t check_x87

c010025a t setup_idt

c0100277 t rp_sidt

c01002fa t early_divide_err

c0100300 t early_illegal_opcode

.... ....

在核心符號表中,左邊一列是符號位址,右邊一列是函式和變數。在乙個模組載入後,任何乙個被模組匯出的符號都會成為核心符號表的一部分。一般情況下,你設計的乙個模組實現了自己所需的功能,這裡也並不一定需要要所有的符號都匯出來。但是,如果希望別人也能用到自己的模組,那就需要將其匯出。

使用以下巨集可以匯出符號到核心符號表:

引用

export_symbol(符號名);

export_symbol_gpl(符號名);

使用 export_symbol_gpl() 只用於包含 gpl 許可權的模組。

示例**:

引用

#include

#include

module_license("dual bsd/gpl");

int add_int(int a,

int b)

int sub_int(int a,

int b)

export_symbol(add_int);

export_symbol(sub_int);

編譯後用 insmod 載入到核心中,然後執行以下命令:

引用

beyes@linux-beyes:~/c/kernel/modadd> cat /proc/kallsyms |grep add_int

f9d70034 r __ksymtab_add_int    [modadd]

f9d7004c r __kstrtab_add_int    [modadd]

f9d70040 r __kcrctab_add_int    [modadd]

6ce40a9f a __crc_add_int    [modadd]

f9d70000 t add_int    [modadd]

(濾掉一些多餘的輸出)

beyes@linux-beyes:~/c/kernel/modadd> cat /proc/kallsyms |grep sub_int

f9d7002c r __ksymtab_sub_int    [modadd]

f9d70044 r __kstrtab_sub_int    [modadd]

f9d7003c r __kcrctab_sub_int    [modadd]

bb5e85f9 a __crc_sub_int    [modadd]

f9d70004 t sub_int    [modadd]

**:

linux核心符號表

所謂核心符號表就是在核心內部函式或變數中可供外部引用的函式和變數的符號表。在 2.6 核心下,使用以下命令可以看到核心符號表 引用 beyes linux beyes cat proc kallsyms more c0100000 t text c0100000 t startup 32 c0100...

Linux核心符號表

1 形成過程 linux核心符號表 proc kallsyms 的形成過程 1 scripts kallsyms.c負責生成system.map 2 kernel kallsyms.c負責生成 proc kallsyms 3 scripts kallsyms.c解析 vmlinux tmp vmli...

Linux核心符號表

linux核心符號表 1 形成過程 linux 核心符號表 proc kallsyms的形成過程 1 scripts kallsyms.c負責生成system.map 2 kernel kallsyms.c負責生成 proc kallsyms 3 scripts kallsyms.c解析vmlinu...