在核心中尋找核心符號表

2021-04-23 06:39:59 字數 956 閱讀 5704

在使用者空間中可以用如下方法得到:

1. 從 system.map 檔案直接得到位址。

例如,要得到 do_fork 的位址,可以在命令列執行 $grep do_fork /usr/src/linux/system.map 。

2. 使用 nm 命令。

$nm vmlinuz |grep do_fork

3. 從 /proc/kallsyms 檔案獲得位址。

$cat /proc/kallsyms |grep do_fork

在2.6較早的版本中可以用kallsyms_lookup_name()來查詢, 但是在我得2.6.18中好像沒有匯出。

貼一下wnps0.26中使用的方法, 前幾天看了下《lkm rootkits on linux x86 v2.6》的中文版,裡面有段尋找核心符號的**, 怎麼看都眼熟, 在仔細看原來是偶wnps的**^_^

/*** read_kallsyms - find sysenter address in /proc/kallsyms.

** success return the sysenter address,failed return 0.

*/#define sysenter_entry "sysenter_entry"

int read_kallsyms(void)

temp[--i] = '/0';

sysenter = ******_strtoul(temp,null,16);

#if debug == 1

printk("sysenter: 0x%8x/n",sysenter);

#endif

break;}}

filp_close(file,null);

return 0;

}

核心符號表

linux核心為了實現模組化,需要提供乙個公共的核心符號表,它包含了所有的全域性核心項 函式以及變數 的位址。當模組載入到核心中後,它所匯出的任何符號都將成為核心公共符號表的一部分。核心模組只需要實現自己的功能而無需匯出任何符號,但這樣其他模組將無法使用該模組的功能,乙個新的模組可以使用自己其他模組...

關於核心符號表

在編寫驅動的過程中,常會使用到export symbol巨集來將定義的函式名匯出到核心符號表。以前只是簡單的知道如果乙個模組中定義的函式要提供給其他模組呼叫,就必須進行匯出。這段時間在編譯單個模組的時候,因為沒編譯成功造成了函式沒定義而報警的情況,因此讓我有乙個機會對核心符號表的問題進行了乙個深入的...

linux核心符號表

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