扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
来源: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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者