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目录。

