“我就是程序,程序就是我。” 梁肇新 《编程高手箴言》这本书就是梁肇新自己十余年来编程经验的集结。在名人出书成为热潮的这几年中,拥有丰富经历和感悟的梁肇新却没有跟风,这本《箴言》是他的第一本著作,可谓厚积薄发。全书通篇没有时髦的IT新名词或新思想,而是踏踏实实地对很多知识进行了深刻的剖析,这有助于为编程打下坚实的根基。只有这样,才能使开发者在飞速变化的软件领域里免于雾里看花,才能更快更深地认识许多新问题、新知识,也才能更从容地应对未来之挑战。相信这本书对广大程序员大有裨益,无论是从技术角度还是从职业生涯指导角度。
第1章 程序点滴. 1
1.1 程序≠软件... 1
1.1.1 商业软件门槛的形成... 2
1.1.2 认清自己的发展... 4
1.2 高手是怎样练成的... 5
1.2.1 高手成长的六个阶段... 5
1.2.2 初级程序员和高级程序员的区别... 7
1.2.3 程序员是吃青春饭的吗... 9
1.3 正确的入门方法... 11
1.3.1 规范的格式是入门的基础... 13
1.3.2 调试的重要性... 17
1.4 开放性思维 ........ 18
1.4.1 动态库的重要性... 19
1.4.2 程序设计流程... 20
1.4.3 保证程序可预测性... 21
第2章 认识CPU 23
2.1 8位微处理器回顾... 23
2.2 16位微处理器... 24
2.2.1 组成结构... 24
2.2.2 8086寄存器组成... 25
2.2.3 内存的寻址... 26
2.2.4 中断处理... 27
2.3 32位微处理器... 29
2.3.1 寄存器组成... 29
2.3.2 保护模式... 32
2.3.3 80386的寻址方式... 32
2.4 【实例】:在DOS实模式下读取4GB内存代码分析... 36
2.4.1 程序的意义... 37
2.4.2 程序代码... 37
2.4.3 程序原理... 41
2.4.4 程序中的一些解释... 42
第3章 Windows运行机理. 44
3.1 内核分析... 44
3.1.1 运行机理... 44
3.1.2 LE文件的格式... 53
3.1.3 VxD的设计实现... 59
3.1.4 【实例】:CPU降温程序代码分析 ........... 65
3.2 消息的运行方式... 82
3.2.1 认识消息... 82
3.2.2 Windows系统中消息的运作方式... 84
3.2.3 消息处理过程实例... 87
3.3 GDI的结构和组成... 89
3.3.1 GDI的组成... 89
3.3.2 GDI和DirectDraw的关系... 91
3.4 线程的机制... 93
3.4.1 线程的工作方式... 93
3.4.2 线程与GDI的冲突:死机的主要原因... 94
3.4.3 线程的内存泄漏的主要原因... 96
3.4.4 进程管理... 98
3.4.5 同步机制... 100
3.5 PE结构分析... 103
3.5.1 PE头标... 103
3.5.2 表节... 113
3.5.3 PE文件引入... 119
3.5.4 PE文件引出... 125
3.5.5 PE文件资源... 129
第4章 编程语言的运行机理. 133
4.1 汇编的原理... 133
4.1.1 指令系统... 133
4.1.2 汇编与Win API的接口方法... 141
4.1.3 【实例】:自定义程序的入口点... 145
4.2 高级语言的原理... 151
4.2.1 C/C++的原理... 151
4.2.2 解释语言的原理... 165
4.2.3 【实例】:用C实现简单的BASIC语言环境... 165
4.3 C、C++的学习方式... 187
4.3.1 从BASIC到C.. 187
4.3.2 C、汇编、API的关系... 187
4.3.3 接口的建立方法 ........... 190
4.4 挂钩技术 ........ 201
4.4.1 Windows上C的挂钩... 201
4.4.2 C++的挂钩技术... 213
第5章 代码的规范和风格 .... 220
5.1 环境的设置... 220
5.1.1 集成环境的设置... 220
5.1.2 TAB值的设置... 221
5.1.3 编译环境的设置... 222
5.1.4 设置herosoft.dsm宏... 224
5.2 变量定义的规范... 227
5.2.1 变量的命名规则... 227
5.2.2 变量定义的地方规定... 228
5.2.3 变量的对齐规定... 229
5.3 代码对齐方式、分块、换行的规范... 230
5.4 快速的代码整理方法... 232
5.5 注释的规范... 233
5.6 头文件的规范... 236
5.7 建议采用的一些规则... 236
5.8 可灵活运用的一些规则... 238
5.9 标准化代码示例... 239
5.10 成对编码规则 ........ 243
5.10.1 成对编码的实现方法... 243
5.10.2 成对编码中的几点问题... 248
5.11 正确的成对编码的工程编程方法 ........ 251
5.11.1 编码前的工作... 252
5.11.2 成对编码的工程方法... 255
5.11.3 两个问题的解释... 260
第6章 分析方法. 266
6.1 分析概要... 266
6.1.1 分析案例一:软件硬盘阵列 ........... 268
6.1.2 分析案例之二:游戏内存修改工具 ........... 274
6.2 接口的提炼 ........ 286
6.2.1 分离接口... 286
6.2.2 参数分析... 287
6.3 主干和分支 ........ 290
6.3.1 主干和分支分析举例... 291
6.3.2 程序检验... 300
6.4 是否对象化... 301
6.5 是否DLL化 ........ 307
6.5.1 DLL的建立和调用... 307
6.5.2 DLL动态与静态加载的比较... 322
6.5.3 DLL中函数的定义... 322
6.6 COM的结构... 324
6.7 几种软件系统的体系结构分析... 326
6.7.1 播放器的解码组成分析 ........... 326
6.7.2 豪杰大眼睛的体系结构 ........... 330
6.7.3 Windows 9x体系结构... 331
第7章 调试方法. 333
7.1 调试要点 ........ 333
7.1.1 调试和编程同步... 333
7.1.2 汇编代码确认... 334
7.1.3 Win32的Debug实现方法... 342
7.2 基本调试实例分析... 343
7.3 多线程应用的调试... 350
7.4 非固定错误的调试... 352
7.4.1 激活调试环境... 352
7.4.2 正确区分错误的类型... 356
7.4.3 常见的偶然错误... 357
第8章 内核优化. 358
8.1 数据类型的认识... 358
8.2 X86优化编码准则 ........ 359
8.2.1 通用的X86优化技术... 359
8.2.2 通用的AMD-K6处理器x86代码优化... 361
8.2.3 AMD-K6处理器整数x86代码优化... 364
8.3 MMX指令的优化 ........ 368
8.3.1 MMX的寄存器介绍... 368
8.3.2 MMX的工作原理... 368
8.3.3 MMX的检测... 369
8.3.4 MMX指令的介绍... 370
8.4 MMX的实例一:图像的淡入淡出 ........ 394
8.4.1 目的... 394
8.4.2 解决方法... 394
8.4.3 分析... 394
8.4.4 初步实现... 395
8.4.5 MMX的优化实现... 401
8.5 MMX的实例二:MMX类的实现方法 ........ 407
8.5.1 实现方法分析... 407
8.5.2 实现步骤... 407
8.5.3 检测过程... 410
8.5.4 总结
我的这一本书很难写,因为试图在这本书中把我所了解的东西和盘托出,但是,其中的每一个部分其实都可以单独成书。由于本书的目的是让那些彷徨于如何提高自己而不得其法者以最大的启迪,所以,我认为必须把握的内容都有必要提及。
本书是以先讲基本知识,然后用实例来开悟读者的,可能基本知识中的内容有些枯燥,这也是我的第一本书一开始不知如何下手的缘故。由于无经验,所以一开始的方法也有一些不当,从而把精彩的内容略去了,在这本书即将完成之际已经无法再补上。如果会再版的话,将会更加精彩有趣。
此书的精要在于悟,即在真实的实验之中进行领悟。必须提到的是,在此书的创作中起关键作用的易虎刚从2001年开始一直努力协助,同时以亲身的进步来证明我所讲的内容和方法,并且在现实的工作中得到提高。
此书写作之时正值IT业狂躁之际,所以书中一再强调耐心,强调方法,所以很难写。难写之处在于思考成分多,实例讲解少。而计算机书籍中以实例讲解,不需要思考的成分多,即一本不需要动什么脑筋的书最容易写。像这本几乎是挖空心思的书最难。
高手在我看来是可以达到对从CPU本身到操作系统内核、到系统平台、到应用软件体系,到软件的具体工作都有着深层次的掌握者。可以达到出神入化境界者谓之高手。
我在书中试图把十几年来的精髓写出来,但可能会存在书不达意之处,请众高手笑纳。
计算机技术的本质是什么?它是一个精心积累人的思维智慧的机器。现在技术越积越多,功能也就越来越强大,智能化也就越来越无所不在。千万不要以为软件无非如此,现在还没有到达它发展的登峰造极的时候。
有人认为现在是Java及.Net的时代,有谁还需要C及汇编呢?要知道,Java及.Net是建立在软件之上的,是为了垄断市场而建立的体系,有如挖好一个金碧辉煌的坑让你往里跳,还自以为站在巨人的肩膀上,事实上成了坑底之蛙。所以,我认为要作为高手,就必须从机器本身出发,从CPU到操作系统、再到软件体系。当你做到这一点时,你会发现自己也可以建立一整套体系,如可以为Ne(tja)va之类。
在本书中,从CPU入手到Windows体系,到接口方式,再到代码规范化;从分析方法,到优化的技巧,逐步深入,畅游计算机关键技术,用真实的例子来深入引领读者的思维方式。以期每一位认真的程序员可以提升自己的功力,渐入化境。
这可能是我惟一的一本以讲解思维方式的书,以后不会有这种方式,所以不管你认为它是好是坏,但这是我的真实体会,这种以"说"为主的书确实太难!
以后我还会出一些书,但将以某一个技术的深入为主,即以"代码"为主,以"说"为辅的方式。一方面这种书好写,另一方面技术的专业化也不太可能包揽计算机技术的内外一切。以后的书将全在此书的基础上进行,即在这里讲过的东西将不再重复。但不管是什么内容,基本的原则是不会变的:(1)成对编码原则;(2)代码规范化原则。