1
arif@khost:~/src/linux$ global -x ip_rcv_finish
ip_rcv_finish     319 net/ipv4/ip_input.c static int ip_rcv_finish(struct sk_buff *skb)

この関数を使用したい場合は、この関数へのポインタを初期化する必要があります。

それを行うには、関数のアドレスが必要です。

/proc/kallsymsユーザー空間から、シンボルのアドレスを取得するために読み取ることができることを見てきました。シンボルテーブルを読み取ってカーネル空間からシンボルのアドレスを抽出できる同様のメカニズムはありますか?

4

1 に答える 1

3

カーネルのバージョンによっては、kallsyms_lookup_namekallsyms_on_each_symbolを使用して、カーネル空間で実行されているコードからシンボルのアドレスを取得できます。

これCONFIG_KALLSYMSは、カーネル構成で が設定されている場合にのみ機能します。

ただし、必要なことを行うためのより良い方法 (カーネル API) がない場合を除き、呼び出される関数のアドレスを検索することはお勧めしません。それでも、他に何も役に立たない場合は、kallsyms_*() API を使用することをお勧めします。

于 2012-12-03T07:11:05.560 に答える