如何在内核中查找内容

时间:2014-03-12 11:25:09

标签: linux-kernel kernel reverse-engineering

我在linux内核上做了各种各样的任务,最后我不断阅读源代码。我还没有真正需要更改内核(我很喜欢所谓的“可加载内核模块”)所以我没有下载内核的源代码,只使用http://lxr.free-electrons.com/。而且我发现自己找到了一个有很多实现的函数,并开始猜测哪一个是我需要的函数。

例如,我在第496行查看文件Linux/virt/kvm/kvm_main.c是对list_add的调用,点击它会给我两个选项:drivers/gpu/drm/radeon/mkregtable.c, line 84include/linux/list.h, line 60 - 很明显,kvm不会将我发送到“gpu”下的东西,但情况并非总是如此。我查看了文件的包含 - 没什么帮助。

所以我的问题:给定来自内核的文件,以及###行的函数调用,找到一个函数调用实际上继续的最佳方法是什么?

(我也很高兴听到有关不包含网站和/或要求我下载源代码的方法)

1 个答案:

答案 0 :(得分:1)

内核中有很多东西是#define' d或typedef' d或映射到结构内部的函数(驱动程序中的fop结构)。因此,浏览内核源代码并不容易。 lxr网站可以帮助您,但当您遇到上述任何数据结构时,它无法继续使用。使用cscope/ctags也是如此。尽管你明确提到反对它,但最好的方法是下载源代码并浏览它。

另一种方法是使用kgdb并按功能检查代码功能,但这需要您了解您想要介入的功能,以节省大量时间。最后但并非最不重要的是,增加内核log级别,并打印可通过dmesg访问的日志。但这些都要求你拥有内核源代码。