程序中有个地方想获取内核符号表,本来通过systemmap文件可以查询到,不过要都写文件,闲麻烦,就采用直接extern全局变量的方法来获取,编译OK,执行OK,可惜执行结果,全局变量为0,郁闷。
然后就是查询资料,发现通过/proc/kallsyms文件也可以查询到内核符号表,于是打开看看,可以得到的结果却是:
lotusswan@lotusswan-TH61U3:~$ cat /proc/kallsyms |grep "kallsyms_lookup_name"
0000000000000000 T module_kallsyms_lookup_name
0000000000000000 T kallsyms_lookup_name
0000000000000000 r __ksymtab_kallsyms_lookup_name
0000000000000000 r __kcrctab_kallsyms_lookup_name
0000000000000000 r __kstrtab_kallsyms_lookup_name
lotusswan@lotusswan-TH61U3:~$
又是0,再次郁闷;在网上闲逛,发现有篇文章说,为了防止攻击,对/proc/kallsyms文件做了限制,不允许普通用户去读,于是采用root用户去读,呵呵,居然有了:
lotusswan@lotusswan-TH61U3:~$ sudo cat /proc/kallsyms |grep "kallsyms_lookup_name"
ffffffff810a6590 T module_kallsyms_lookup_name
ffffffff810a6cf0 T kallsyms_lookup_name
ffffffff81a87bc0 r __ksymtab_kallsyms_lookup_name
ffffffff81a968f0 r __kcrctab_kallsyms_lookup_name
ffffffff81a9c563 r __kstrtab_kallsyms_lookup_name
lotusswan@lotusswan-TH61U3:~$
有了,可是仍然郁闷,因为察看源代码,这个文件的权限是0444,查看文件权限:
-r--r--r-- 1 root root 0 5月 2 21:04 kallsyms
普通用户也是有读权限的啊,可为什么读到的地址为0呢?
还有为什么EXPORT_SYMBOL的全局变量在模块中使用,返回的地址为0呢?
看来内核的水很深啊,得加把劲,否则就淹死了。继续,希望早日解决这两个问题。
阅读(4428) | 评论(0) | 转发(1) |