第一章 欲向码途问大道,锵锵bit是吾刀
需准备的知识
◆ 了解一些计算机的基本结构,如CPU、寄存器、内存......
◆ 基本掌握C语言
◆ 了解一点汇编更好
为你提供的能力
◆ 本章的调试技巧→支撑整本书的底层调试和探索。
◆ 1.2节和1.8.2节的机器码构造能力→2.1节解密之hello world和7.4节的构造自定位代码
◆ 1.2节指针机制→2.3节指针的指针bug、5.2.2节线程函数的this指针传递。
◆ 1.3节的函数调用机制→2.1节、2.2节、2.3节、2.4节、2.6节、2.7节、2.8节、和2.9节的错误调试和逆向分析,3.3.5节的bug分析,4.1.6节和4.7.6节的this指针传递机制和虚函数机制分析,5.1.4节的bug分析,6.5节内存释放错误分析和7.4节分析自定位代码
◆ 1.4.1节数组模型→2.2节的bug分析。
◆ 1.4.2节结构体模型→1.5.2节的bug,1.9节的分析strlen中的对齐读,3.3.3节的结构体对齐bug。
◆ 1.5.1节对齐→1.5.2节的bug,1.9节的分析strlen中的对齐读,3.3.3节的结构体对齐bug
◆ 1.6节的switch和1.9节的分析→学会一种分析方法和汇编学习方法。
◆ 1.8节的加载器重定位→3.3节的链接期重定位的理解和程序构造。
◆ 充分理解猜测、实证和构建方法
如果你是一个穿越小说的主角来到计算机世界,面对着像尘沙般枯燥简单的0/1 bit、五光十色的软件高楼大厦和像烟火一样绽放又凋谢的各种时髦技术,你的路在哪里?你怎样把握根本大道,创建一个属于自己的王国?是尘沙,那看似枯燥的底层程序观就是你真正纵横捭阖的根基。你想在面对一个没有源代码的黑盒似的执行程序时,为它点石成金般地添加新功能吗?那是上帝说要有光,即有光的神奇。你想在众人困惑于某个诡异bug时,以逆向之刀,游刃于乱花迷人眼的反汇编迷网,一记小李飞刀直指那乱网后的真相吗?那是红尘游侠寂寞的潇洒。你想看透各种辉煌技术的本质,举重若轻吗?那是羽扇纶巾的将帅风华。这些能力都来自本章的底层程序观,它是你的马步,你的正法眼。
来看看本章的功效。如果你从1.1节和1.8节中“玩”会了构造机器码,就能理解并完成第7章的构造自定位代码,解决this指针的传递问题。如果你领悟了1.3节中函数调用的所有细节,就能自己解决2.4节语言互通的奇怪bug。如果你对1.3节和1.4节有了把握,就奠定了整个第4章对象模型的基础。第4章从底层剖析了对象,又为第5章巧妙的线程封装和第6章中从DLL导出对象提供了根基。这条通天大路,环环相扣,均根植于本章的点点滴滴的淬炼。
好了,我们的主角,开始枯燥、琐碎又起伏跌宕的修炼之旅吧。