有趣的二进制:软件安全与逆向分析
上QQ阅读APP看书,第一时间看更新

前言

如今,计算机已经深入千家万户,为我们的生活带来了很多方便。但与此同时,计算机系统也变得越来越复杂,技术人员需要学习的知识也与日俱增。和过去相比,计算机技术中难以理解的黑箱也越来越多了。

 

●操作系统到底是干什么的?

●CPU和内存到底是干什么的?

●软件为什么能够运行?

●为什么会存在安全漏洞?

●为什么攻击者能够运行任意代码?

 

要想回答上面这些问题,我们需要用到以汇编为代表的二进制层面的知识。

尽管现在正是Web应用如日中天的时候,但二进制层面的知识依然能够在关键时刻发挥作用。例如:

“用C/C++开发的程序出现了不明原因的bug,看了源代码还是找不到原因。”

在这样的情况下,即便不会编写汇编代码,只要能看懂一些汇编语言,就可以通过调试器立刻锁定发生bug的位置,迅速应对。

此外,如果别人编写的库里有bug,那么即便看不到源代码,我们也能够对其内部结构进行分析,并找到避开问题的方法,也可以为库的开发者提供更有帮助的信息。

再举个例子。学习汇编能够更好地理解CPU的工作原理,从而能够处理系统内核、驱动程序这一类近乎于黑箱的底层问题,对于实际的底层开发工作也非常有帮助。

不过,说实在的,“有没有帮助”“流不流行”这些都不重要,从个人经验来看,因为感觉“好像有用”“好像有帮助”而开始学习的东西,最后基本上都没有真正掌握(笑)。当然,也许是因为我天资愚钝,不过我们在上学的时候,老师天天教导我们要好好学习,可是实际上有几个人真的好好学习了呢?虽然我没做过统计,但从感觉来看,整个日本也许还不到1%吧。

那么问题来了,要想真正学会一件事,到底需要什么呢?

我是从初中时代开始学习编程的,尽管当时完全没有想过将来要当程序员,靠技术吃饭,但我依然痴迷于计算机,每天编程到深更半夜,甚至影响了学习成绩,令父母担忧。

为什么当时的我如此痴迷于计算机而无法自拔呢?那是因为“编程太有趣了”。自己编写的代码能够按照设想运行起来,或者是没有按照设想运行起来,再去查找原因,这些事情都为我带来了莫大的乐趣。

我编写这本书,也是为了让大家对技术感到“有趣”,并且“想了解得更多”。而在编写这本书的过程中,我再一次感到,在不计其数的编程语言中,汇编语言是最“有趣”的一种。

如果你突然觉得“讲底层问题的书好像挺有意思的”而买了这本书,那么我相信,这本书一定能够为你带来超出预期的价值。

希望大家能够通过这本书,感受到二进制世界的乐趣。