Welcome 微信登录

首页 / 操作系统 / Linux / Linux内核中符号地址的获取

有些内核函数或者内核变量是不导出的,但是确实需要用,那该怎么办?因此寻找内核符号地址就有必要进行一下总结,更有甚,如果想找一条特定的指令,比如movl的指令地址,那更需要投入一些精力!总的来说,我总结了下面五种方式:1.通过procfs中的kallsym文件或者System.map文件直接查找这种方式借助于文件,依赖于文件的存在,不需要什么编程能力,只要会在文件中查找信息即可2.google一下这种方式借助于互联网,依赖你对信息的筛选能力。最有代表性的,寻找system_call和sys_call_table的地址,网上会说先找到0x80个中断描述符,然后在寻找机器码特征。这种方式实际上广泛用于替换系统调用这种小伎俩。3.使用dump_stack这种方式需要在你想得到的地址调用链条的下游调用dump_stack,然后通过dmesg信息得到相应的地址信息。同理等价的方式就是故意制造错误,迫使内核打印地址。4.利用栈结构和栈原理寻找记住栈中会有什么信息,一般会有参数地址信息,会有一个个的栈帧信息,每当调用call指令的时候,还会将下一条指令的地址压入栈中。通过这些信息我们可以得到大量的地址信息。5.从/dev/mem中搜索这个方式最有技术含量,也最困难,然而什么外界工具都不需要,甚至都不需要你懂编程语言。然而需要你对机器码指令十分精通,对内存布局十分精通,它实际上是一种机器语言的编码方式从上述方法可以看出,从1到5,对外部工具的依赖越来越少,然而对自身的知识储备要求越来越高,因此完成一件事的成本貌似是守恒的。如果一个人的知识储备非常丰富,本身有十分聪明,他会使用哪种方式呢?会使用第五种方式吗?我想绝对不!他肯定尝试使用第一种方式,然后第二种...他很有可能永远不会使用第五种方式,虽然他有能力完成!这就是说,在解决问题的时候,我们不会在乎难度和能力,我们只在乎成本,因此我们总是喜欢从阻力最小的方向上切入,有简单的方式就不使用更复杂的方式,这也印证了简单就是美的普世原则。在力求简单的过程中,我们不得不积累更多的知识,进行更多的尝试...想起一句广告词,加速,是为了放慢脚步!Ubuntu系统托盘工具:AllTrayLinux的Netfilter框架深度思考-对比Cisco的ACL相关资讯      Linux内核 
  • IT人员必须了解的六项Linux内核变  (今 12:05)
  • Linux 内核更新:3.10.98、3.14.62  (02月26日)
  • Linux:让手机运行主线内核  (11/26/2015 22:16:17)
  • Linux内核自防护项目  (05月24日)
  • Linux 内核架构的理解  (12/09/2015 09:01:01)
  • Linux内核被指缺乏安全性  (11/07/2015 08:28:47)
本文评论 查看全部评论 (0)
表情: 姓名: 字数