2012-12-02 3 views
1
[email protected]:~/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을 읽을 수 있음을 보았다. 커널 공간에서 기호의 주소를 추출하기 위해 기호 테이블을 읽을 수있는 곳에서 비슷한 메커니즘이 있습니까?

답변

2

커널 버전에 따라 kallsyms_lookup_name 및/또는 kallsyms_on_each_symbol을 사용하여 커널 공간에서 실행되는 코드의 기호 주소를 얻을 수 있습니다.

커널 구성에 CONFIG_KALLSYMS이 설정되어있는 경우에만 작동합니다.

원하는 기능을 수행하는 더 좋은 방법 (커널 API)이 없으면 호출 할 함수 주소를 찾는 것을 권장하지 않습니다. 여전히, 다른 도움이 없다면 kallsyms _ *() API가 도움이 될 수 있습니다.