Linux内核源码分析方法

发表于:2013-3-25 13:46

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Florian    来源:51Testing软件测试网采编

  通过这一步的注释,我们基本上能完全把握待分析代码整体的实现机制了。而所有的分析工作可以认为完成了80%。这一步工作尤其关键,我们必须尽量让注释的信息足够的准确,才能更好的理解待分析代码的内部模块的划分。虽然Linux内核中使用了宏语法“module_init”和“module_exit”声明模块文件,但是对模块内部子功能的划分是建立在充分了解模块的功能基础上的。只有正确划分好模块,我们才能弄清模块提供了哪些外部函数和变量(使用EXPORT_SYMBOL_GPL或者EXPORT_SYMBOL导出的符号)。才能继续下一步的模块内标识符依赖关系分析。

  第五步:模块内部标识符依赖关系

  通过第四步对代码模块的划分,我们就可以很“轻松”地逐个对模块进行分析了。一般的,我们可以从文件底部的模块出入口函数开始(“module_init”和“module_exit”声明的函数,一般都在文件最后),根据它们调用的函数(自己定义的或者其他模块的函数)和使用的关键变量(本文件内的全局变量或者其他模块的外部变量)画出“函数-变量-函数”依赖关系图——我们称为标识符依赖关系图。

  当然,模块内标识符依赖关系并非是单纯的树形结构,很多情况是错综复杂的网络关系。这时候,我们对代码的详细注释的作用就体现出来了。我们根据函数本身的含义,将模块进行子功能划分,抽取出每个子功能的标识符依赖树。

  通过标识符依赖关系分析,可以很清晰的展示模块定义的函数调用了那些函数,使用了哪些变量,以及模块子功能之间的依赖关系——公用了哪些函数和变量等。

  第六步:模块间相互依赖关系

  一旦将所有的模块内部标识符依赖关系图整理完毕,根据模块使用的其他模块的变量或函数,可以很容易得到模块之间的依赖关系。

  cpufreq代码的模块依赖关系可以表示为如下关系。

54/5<12345>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号