第 1 章绪论1
1.1 “拿来主义”编程技术简介............1
1.1.1 什么是“拿来主义” ..........1
1.1.2 为什么要采用“拿来主义”.............................2
1.2 常用的“拿来主义”编程技术......3
1.3 “拿来主义”编程技术的分类........5
1.3.1 静态分析型的拿来技术......5
1.3.2 功能型的拿来技术.6
1.3.3 输出型的拿来技术.7
1.3.4 嵌入型的拿来技术.8
1.3.5 中间嗅探型的拿来技术......8
1.3.6 控制交互型的拿来技术......9
第 1 部分静态分析型的拿来技术
第 2 章操作系统数据的拿来.........12
2.1 本章的预备知识..............12
2.1.1 进制的表示与转换............12
2.1.2 DOS 下的地址表示...........14
2.1.3 Debug 工具的使用............15
2.2 裸机时代的可用数据......19
2.2.1 裸机的启动过程...19
2.2.2 CMOS 内存中的数据........20
2.2.3 中断与中断向量...25
2.2.4 BIOS 数据区........28
2.2.5 ROM 中的数据.....36
2.3 DOS 中的全局变量.........42
2.3.1 曾经辉煌的DOS..43
2.3.2 DOS 的内存映射..44
2.3.3 DOS 数据区.........46
2.3.4 DOS 的“拿来”实例.......47
2.4 Windows 中的共享数据..49
2.4.1 如日中天的Windows ........49
2.4.2 Windows 中的环境变量....50
VIII 独辟蹊径的编程思维――“拿来主义”编程
2.4.3 Windows 环境变量的意义.52
2.4.4 Windows 环境变量的编程.53
2.4.5 修改Windows 的全局环境变量......................56
2.5 编程实例:基于WinIO 的CMOS 数据读写.............56
2.5.1 程序主界面..........57
2.5.2 程序代码..............57
第 3 章系统共享文件中的拿来 ....61
3.1 操作系统配置文件的拿来............61
3.1.1 对配置文件的读/写...........62
3.1.2 Boot.ini .................65
3.2 目录名称的拿来..............66
3.2.1 与用户名相同的目录名....67
3.2.2 所安装的软件列表............68
3.2.3 与用户相关的特定目录名.68
3.3 数据库访问式的共享......69
3.3.1 ODBC 数据访问方式........69
3.3.2 ADO 数据连接.....82
3.4 注册表的共享.................86
3.4.1 基于注册表访问的API .....86
3.4.2 注册表项的操作...92
3.5 文件级的拿来.................93
3.5.1 网络配置文件.......93
3.5.2 日志文件..............97
3.5.3 Windows 目录自带的音频文件资源.............103
3.6 编程实例1:通过ODBC 对txt 文件进行读/写......108
3.6.1 程序主界面........109
3.6.2 程序代码............109
3.7 编程实例2:通过ADO 对Excel 文件进行读/写.... 112
3.7.1 程序主界面........ 112
3.7.2 程序代码............ 113
第 4 章静态程序文件中资源的拿来 ...................... 115
4.1 常见可执行文件的格式 115
4.1.1 DOS 下的COM 和EXE 文件的格式简介.... 115
4.1.2 Windows 下PE 文件的格式.......................... 118
4.2 VC 软件编程人员眼中的程序资源.......................... 119
4.3 在可执行文件中调整资源..........121
4.3.1 从可执行文件中提取资源.............................121
4.3.2 更换可执行文件中的资源.............................122
4.4 软件汉化与界面调整....122
4.4.1 软件汉化............123
目录IX
4.4.2 软件界面调整.....125
4.5 界面复制.......................126
4.5.1 将可执行文件中的界面复制到工程中..........126
4.5.2 对两个工程之间界面的复制.........................128
第 2 部分功能型的拿来技术
第 5 章无界面程序命令行中的拿来 ......................132
5.1 什么是命令行...............132
5.1.1 常用的DOS 内部命令....134
5.1.2 常用的DOS 外部命令....138
5.2 命令行的组合使用........149
5.2.1 设备文件............149
5.2.2 重定向技术........151
5.2.3 管道技术............155
5.3 命令行的编程技术........156
5.3.1 可嵌入DOS 命令行的几个函数...................156
5.3.2 管道编程的几个函数......161
5.4 编程实例1:使用重定向接收外部程序运行结果...162
5.4.1 程序主界面........162
5.4.2 程序代码............163
5.5 编程实例2:使用管道接收外部程序运行结果......164
5.5.1 程序主界面........164
5.5.2 程序代码............165
第 6 章有界面程序消息式的拿来 ........ 167
6.1 消息机制.......................167
6.1.1 消息的定义........168
6.1.2 消息的队列和非队列模式.............................169
6.1.3 与消息有关的几个函数..170
6.2 Visual C++自带的消息处理工具175
6.2.1 程序界面上的控件..........175
6.2.2 Visual C++下提供的标准控件.......................176
6.2.3 消息查询工具Spy++.......177
6.3 通过消息控制程序........182
6.3.1 与窗口有关的几个函数..182
6.3.2 与消息控制有关的几个函数.........................186
6.4 编程实例:通过消息控制程序..191
6.4.1 程序主界面........191
6.4.2 程序代码............192
X 独辟蹊径的编程思维――“拿来主义”编程
第3 部分输出接收型的拿来技术
第 7 章读取 B/S 界面上输出的数据......................200
7.1 Web 服务器的安装和测试.........201
7.1.1 Web 服务器的安装和验证............................201
7.1.2 检验Web 服务器的效果.205
7.2 基于Web 应用的编程接口........207
7.2.1 CInternetSession 类..........208
7.2.2 CInternetConnection 类....216
7.2.3 CHttpConnection 类.........217
7.2.4 CFtpConnection 类...........218
7.2.5 CInternetFile 类..222
7.2.6 CInternetException 类......224
7.3 编程实例:基于Web 的拿来方式...........................225
7.3.1 原理分析............226
7.3.2 程序主界面........228
7.3.3 程序代码............228
第 8 章对 Office 文件输出的接收操作.................231
8.1 Microsoft Office 简介....232
8.2 输出式的拿来简介........233
8.2.1 COM/DCOM 的概念.......234
8.2.2 AfxOleInit 函数..234
8.2.3 COleVariant 类....235
8.2.4 COleDispatchDriver 类....240
8.3 程序员眼中的Office.....241
8.3.1 Office 的结构框架...........242
8.3.2 Office 组件的导入...........242
8.4 Word 的结构输出..........244
8.4.1 Word 简介...........244
8.4.2 Word 中的要素...244
8.5 Excel 的结构输出..........245
8.5.1 Excel 简介..........246
8.5.2 Excel 中的要素...246
8.6 PowerPoint 的结构输出.247
8.6.1 PowerPoint 简介.248
8.6.2 PowerPoint 中的要素.......248
8.7 输出式的拿来技术在信息安全领域内的应用.........249
8.7.1 数字水印简介.....249
8.7.2 Word 中格式输出类的数字水印...................250
8.7.3 Word 中内容格式的数字水印.......................251
8.8 编程实例1:读取Word 文件中的纯文本内容........252
目录XI
8.8.1 程序主界面........252
8.8.2 程序代码............253
8.9 编程实例2:读写Excel 中的数据..........................254
8.9.1 程序主界面........255
8.9.2 程序代码............255
8.10 编程实例3:控制PPT 的输出258
8.10.1 程序主界面.......258
8.10.2 程序代码..........259
第 4 部分嵌入型的拿来技术
第 9 章控件嵌入式的拿来 ..........264
9.1 ActiveX 技术简介.........264
9.2 在Windows 程序中嵌入ActiveX 控件....................266
9.2.1 设置对ActiveX 控件的支持.........................266
9.2.2 从系统注册的组件中导入要使用的ActiveX 控件..................267
9.2.3 从DLL 文件中导入要使用的ActiveX 控件.268
9.3 编程实例1:嵌入式视频播放器.............................268
9.3.1 播放器编程的简介..........268
9.3.2 VLC 简介...........269
9.3.3 程序主界面........274
9.3.4 程序代码............274
9.4 编程实例2:嵌入式PDF 阅读器............................276
9.4.1 在VC 对PDF 的可视化使用........................276
9.4.2 程序主界面........277
9.4.3 程序代码............278
第 10 章界面嵌入式的拿来........280
10.1 屏幕式的嵌入..............280
10.1.1 图形桌面..........281
10.1.2 实现界面嵌入式要考虑的问题...................283
10.1.3 实现像素级操作主要涉及的API................286
10.1.4 实现桌面级操作主要涉及的API................288
10.1.5 屏幕的截取.......293
10.2 内容式的嵌入..............297
10.2.1 通过IE 调用访问网络地址.........................297
10.2.2 通过嵌入页面方式访问网络地址...............297
10.2.3 通过资源管理器方式访问本地文件系统....298
10.2.4 CHhtmlView 的API.......299
10.3 编程实例1:将程序界面自己程序的一部分进行嵌入....................301
10.3.1 程序主界面.......302
10.3.2 程序代码..........303
XII 独辟蹊径的编程思维――“拿来主义”编程
10.4 编程实例2:嵌入整个Web 页面和资源管理器...306
10.4.1 程序主界面.......307
10.4.2 程序代码..........307
第 5 部分中间嗅探型的拿来技术
第 11 章程序调用时的数据过滤 .............................310
11.1 DLL 文件的意义和用法...........310
11.1.1 DLL 文件的意义........... 311
11.1.2 与DLL 调用相关的函数.............................312
11.1.3 DLL 文件的调用步骤....315
11.2 从EXE 或DLL 文件中找到函数...........................316
11.2.1 Depends 的使用方式.....316
11.2.2 从ICMP.DLL 中抽取函数...........................317
11.2.3 ICMP.DLL 中各函数的用法........................318
11.3 重载DLL 文件............321
11.3.1 DLL 文件重载的原理....321
11.3.2 DLL 文件重载的意义....322
11.4 具有重载特性的DLL 文件创建步骤.....................322
11.4.1 普通DLL 文件的创建步骤.........................323
11.4.2 重载DLL 文件的创建步骤.........................324
11.5 编程实例1:通过ICMP.DLL 制作tracert 命令....325
11.5.1 程序主界面.......326
11.5.2 程序代码..........327
11.6 编程实例2:重载ICMP.DLL 以记录ICMP 协议操作....................330
11.6.1 程序主界面.......330
11.6.2 程序代码..........331
第 12 章网络通信时的数据监听.............................335
12.1 网络通信简介..............336
12.1.1 网络嗅探技术...336
12.1.2 网络协议分析和行为分析...........................336
12.1.3 黑客级别的分析............339
12.2 数据流的截获..............344
12.2.1 单机数据流的获取........344
12.2.2 网络数据流的获取........346
12.3 Socket 编程接口..........348
12.3.1 几个重要的概念............349
12.3.2 Windows Socket 结构....350
12.3.3 Windows socket 转换类函数........................353
12.3.4 Windows socket 通信类函数返回值............357
12.3.5 Windows socket 通信类函数........................359
目录XIII
12.4 编程实例:RAW Socket 嗅探器............................368
12.4.1 程序主界面.......368
12.4.2 程序代码..........369
第 13 章串口通信时的数据监控.............................377
13.1 串口的通信与监听......377
13.1.1 串口简介..........377
13.1.2 串口通信中的“拿来”技术.......................379
13.2 基于VSPE 的串口开发技术....380
13.2.1 VSPE 简介........381
13.2.2 VSPE 的术语....381
13.2.3 VSPE 的串口嗅探功能..386
13.2.4 VSPE 的使用与开发......388
13.2.5 VSPE 的API ....388
13.3 编程实例:串口嗅探器...........392
13.3.1 程序主界面.......393
13.3.2 程序代码..........394
第 6 部分控制交互型的拿来技术
第 14 章从运行的程序中拿来 ...402
14.1 Windows 内存模式......402
14.1.1 Windows 的对内存读写的限制...................403
14.1.2 Windows 的内存管理....404
14.1.3 调试程序简介...407
14.2 基于WinIO 的内存读取编程...408
14.2.1 WinIO 的API ...408
14.2.2 WinIO 的编程...412
14.3 基于API 的程序调试函数.......412
14.3.1 Windows 调试程序的结构...........................413
14.3.2 Windows 调试程序的API ...........................422
14.3.3 Windows 的进程API.....428
14.3.4 Windows 的动态内存API ...........................429
14.3.5 Windows 调试程序的编写方式...................433
14.4 编程实例:读正在执行程序的数据......................434
14.4.1 程序主界面.......435
14.4.2 程序代码..........435
第 15 章 Hook 控制式的拿来.....440
15.1 Hook 简介...................440
15.1.1 什么是Hook.....441
15.1.2 Hook 的运行机制..........442
15.1.3 怎么使用Hook.443
XIV 独辟蹊径的编程思维――“拿来主义”编程
15.2 Hook 函数...................443
15.2.1 SetWindowsHookEx 函数............................444
15.2.2 UnhookWindowsHookEx 函数.....................446
15.2.3 CallNextHookEx 函数....446
15.2.4 回调函数..........447
15.3 Hook 的类型................447
15.3.1 WH_CALLWNDPROC..447
15.3.2 WH_CBT..........448
15.3.3 WM_QUEUESYNC.......452
15.3.4 WH_DEBUG ....452
15.3.5 WH_FOREGROUNDIDLE.......................... 453
15.3.6 WH_GETMESSAGE .....453
15.3.7 WH_HARDWARE.........453
15.3.8 WH_JOURNALRECORD............................453
15.3.9 WH_JOURNALPLAYBACK.......................454
15.3.10 WH_KEYBOARD .......455
15.3.11 WH_MOUSE ..455
15.3.12 WH_MSGFILTER........455
15.3.13 WH_SHELL....456
15.3.14 WH_SYSMSGFILTER.456
15.4 编程实例1:线程Hook 程序编写........................456
15.4.1 程序主界面.......456
15.4.2 程序代码..........457
15.5 编程实例2:全局Hook 程序编写........................459
15.5.1 程序主界面.......459
15.5.2 DLL 程序代码..460
15.5.3 调用程序代码...462
附录A 本书容易混淆概念解析..464
A.1 同名不同义概念...........464
A.2 同义不同名概念...........464
A.3 易混概念......................466
附录B 详解ASCII 码.......468
附录C HTTP 错误返回码...........474
参考文献....479
后记.............481
展开
《独辟蹊径的编程思维——“拿来主义”编程》讲述“拿来主义”的实践,涵盖操作系统、Web等多方面技术,对广大程序员来说是一本很好的教材。其内容丰富而深刻,极具参考价值和实用性,堪称经典之作。
——网络尖刀核心成员 冷鹰
“拿来主义”的编程技术正是“欲穷千里目,更上一层楼”编程思路的真实写照,在既定的环境中,尽可能通过已有的成果,择其长而弃其短,举其一而反其三,最终编制出更有效的程序。
——浙江工业大学副教授、博士 高家全
“拿来主义”编程不仅仅是一些编程技术,更重要的是编程思想。“他山之石,可以攻玉”,合理合法地使用既有的技术,不仅能提高开发效率,还能充分利用别人的好思想。
——华东计算技术研究所高级工程师、博士 许光泞
作者撰写的这本书深入分析了这种编程方式并一一归类,并结合一些典故和形象的案例做了详细阐述,对团队和个人提高工作效率非常有帮助。整本书深入浅出,适合各阶段开发者,非常值得一读。
——InfoQ编辑 王翊仰
本书借用鲁迅先生“拿来主义”一词的中心思想,在合法的前提下,利用开源的程序、系统,结合自身的业务需求进行扩充式开发,其目的就是降低开发难度,缩短开发周期,提升开发的可行性和有效性。同时,通过案例学习,也是一种非常有效的提升编程技能的学习手段。
——太平洋保险公司资深IT技术专家 吴国安
瑞民的书我看过很多,特别是对硬件设备的监控,对我们做视频监控领域的人很有帮助。这是一本对现有资源进行二次开发、充分利用的好书,值得一看。
——广州视鹰电子科技有限公司总经理赵党
除了代码和接口,我们还可以“拿来”思想,可以“拿来”设计模式,可以“拿来”测试驱动开发,还可以“拿来”领域驱动设计。在“拿来”之前,还需要知道有什么可以“被拿来”。本书从若干个角度进行分析,引领读者了解哪些是可以“被拿来”的。
这是一本用心写就的书。
——敏捷开发独立咨询师、《会说话的代码》作者王洪亮