科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道内核之旅 揭开系统神秘的面纱(下)

内核之旅 揭开系统神秘的面纱(下)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在FreeBSD中内核代码存放在/usr/src内,其层次结构如下所示:(摘自BSD官方站点)在BSD下面还有很多不错的小工具可以使用,下面我列举几个经常用到的工具:  readelf:分析elf文件。

来源:IT专家网 2008年11月11日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

  FreeBSD篇

  (一) 基础概念

  Unix系统在系统架构上与Windows操作系统存在很多不同之处,但底层代码对硬件的控制都不会存在很大的区别;至于如何对比Unix、Windows系统架构的不同之处,只能等该文档的最后几篇文档来简单的书写。

  备注:在写该文档时,我使用的FreeBSD版本是4.7版,老了一些,由于以前很多代码都在4.7版本上完成,也就没有再更换最新版本,如果大家对FreeBSD感兴趣的话,可以使用最新版本的BSD系统。

  A:源代码布局

  在开始分析BSD的内核前,我们需要了解BSD内核代码的各个部分分别在那些内核代码文件夹内;由于BSD属于开源OS,我们不需要象搞Windows那样搞逆向工程,可以通过分析内核代码来熟悉BSD的内核功能,在以后的一些文档中,如果时间允许,也会结合FreeBSD官方文档,对FreeBSD的内核代码进行简单的分析。

  在FreeBSD中内核代码存放在/usr/src内,其层次结构如下所示:(摘自BSD官方站点)

  bin/ 在 /bin 中的文件的源代码

  contrib/ 由其他开发组织维护的源代码

  crypto/ 与密码学有关的源代码

  etc/ 在 /etc 中的文件的源代码

  games/ 在 /usr/games 中的文件的源代码

  gnu/ 采用 GNU Public License 授权的工具

  include/ 在 /usr/include 中的文件的源代码

  kerberos5/ 第 5 版 Kerberos 的源代码

  lib/ 在 /usr/lib 中的文件的源代码

  libexec/ 在 /usr/libexec 中的文件的源代码

  release/ 用于制作 FreeBSD 发行版本的文件

  rescue/ 建造系统时 /rescue中的工具

  sbin/ 在 /sbin 中的文件的源代码

  secure/ FreeSec 的源代码

  share/ 在 /usr/share 中的文件的源代码

  sys/ 内核的源代码文件

  tools/ 用于维护和自动测试 FreeBSD 的工具

  usr.bin/ 在 /usr/bin 中的文件的源代码

  usr.sbin/ 在 /usr/sbin 中的文件的源代码

  B:调试工具

  在BSD下面的调试工具为GDB,由于本人的懒惰,并没有再关心过其它的调试工具;以前曾试图使用Linux下面的类似SoftIce的工具,但发现始终没有在Windows下使用SoftIce那样舒服;于是继续使用GDB。KGDB可以进行内核调试,但必须为双机调试。一般在针对*NIX的调试中,多数公司会采取硬件调试技术,当然如果不允许使用硬件调试技术,也只能采取折中的双机调试办法。

  在BSD下面还有很多不错的小工具可以使用,下面我列举几个经常用到的工具:

  readelf:分析elf文件。Eg:readelf –h /bin/ls

  ktrace:跟踪程序执行过程。Eg:ktrace ls

  kdump:打印程序执行过程的ktrace记录。Eg:kdump

  kldload:加载内核模块

  kldstat:内核模块状态

  kldunload:卸载内核模块

  kldconfig:内核模块配置

  man:如果你想知道ls命令的具体使用说明,使用man命令吧,man命令可以告诉你很多事情。

  其它命令:请搜索/bin /sbin /usr/bin /use/sbin目录。

  (二) 如何着手分析一个UNIX

  了解OS的系统结构是分析一个OS的最好办法,我不知道大家喜欢从何处开始着手;我的习惯是从OS启动开始着手分析,从OS的启动过程开始分析,了解OS的启动阶段,加载模块,可以帮助我们找到实际分析问题时的切入点。例如:FreeBSD是如何开始从BIOS加载初始化代码的,FreeBSD从何处开始实现demon程序的,FreeBSD是从何处开始初始化内核代码的,等等问题;都可以在启动过程中找到答案。了解了OS的启动过程后,我们可以有针对性的分析了;例如:我想分析TCP/IP在内核的实现部分,就结合源代码去仔细的分析;由于我们熟悉了OS的启动过程,我们要分析的TCP/IP部分的代码在何处被加载执行我们也会有比较粗浅的认识,然后再逐步的深入。

  当然以上只是我个人的一些观点,如果大家有好的办法,可以推荐下。

  我们该文档的内容,将从以下几个部分阐述,写完以下部分的文档,整个BSD的内核系列简单文档也就结束了。

  A: 系统结构

  熟悉系统结构,有助于我们了解操作系统的组成模块。

  B: FreeBSD启动过程

  熟悉启动过程,可以使我们知道我们感兴趣的部分在那里开始被加载的。

  C: SYSCALL系统调用

  熟悉SYSCALL系统调用,可以帮助我们了解一个用户态程序怎么与内核态交互,并实现程序功能。

  D: KERNEL模块

  熟悉KERNEL模块,可以更深的了解BSD这个OS。

  E: 驱动模块

  熟悉驱动模块,熟悉驱动的编写有助于朝系统级编程靠拢的稍微近些。

  F: TCP/IP的*BSD实现

  额外的章节,只是想分析TCP/IP而已。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章