Dll运行机理

咸清 2011-02-28 01:40:25
“而对于DLL,函数储存在一个独立的动态链接库文件中。在创建Windows程序时,链接过程并不把DLL文件链接到程序上。直到程序运行并调用一个DLLs中的函数时,该程序才要求这个函数的地址。此时Windows才在DLL中寻找被调用函数,并把它的地址传送给调用程序。一般情况下,如果一个应用程序使用了动态链接库,Win32系统保证内存中只有DLL的一份复制品,这是通过内存映射实现的。DLL首先被调入Win32系统的全局堆栈,然后映射到调用这个DLL的进程的地址空间。在Win32系统中,每个进程拥有自己的32位线性地址空间。如果一个DLL被多个进程调用,每个进程都会被分配一份该DLL的映像。”

既然是被调入Win32系统的全局堆栈,那么我就想知道,dll的代码区、数据区都拷贝到内存中了吗?
如果这个dll处于网络中的一个位置,映射到调用这个DLL的进程的地址空间时,会不会包含dll的详细地址?IP+端口号+路径……

欢迎发表意见!
十分感谢阅读!
...全文
270 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
csorca 2011-03-01
  • 打赏
  • 举报
回复
反正都是在一个特定的“space”里头, 并且经过了各种系统层的保护, 不断校验这些数据链的合法性

你可以认为你要的信息都在他是一个 文件分配表, 也可以是个特定的文件头里头, 因为你的那些信息都是很重要的概要信息!

但系统设计角度,合理的想法肯定是每个文件头的入口, 同样也是被一个系统“表”收集了, 系统访问内存文件先从这些表入手。 你就找这个表就可以了。 找到这个表, 再看看系统对这些在干什么? 每个时钟周期内系统在校验什么。 至少这2个方面要搞清楚才能在根本上把握!

这个方面最好还是能参阅一下微软的系统设计, 看看调度文件的整个过程是怎么样的, 涉及到哪些东西, 这样就很容易从一个大局面来把握, 如果对系统设计熟悉, 在这个层次上回头看这些就容易多了, 现在想还不如去看看。
Saingel 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 ybh37 的回复:]

我觉得,regsvr32.exe的注册原理值得研究~~
[/Quote]
先搞清楚是动态链接库dll还是activeX/com Dll,
前者无需注册所以即使在共享目录只要有权限就能使用,
后者需要注册,本地没注册不能使用,注册了也是使用本地的activex dll
Tiger_Zhao 2011-03-01
  • 打赏
  • 举报
回复
其实为了简单,我 7 楼只说了物理内存。
exe 进程通过映射调用 dll 函数时,系统保证该函数存在与某个物理页面中。
但是,每个进程有2G的虚拟空间(常规设置),物理内存总是不够用的,所以系统会用到磁盘上的交换文件,将某些虚拟内存的页面临时存放在磁盘上。
而对“已加载”的 dll,理想情况当然是一直驻留在物理内存中,但真要腾出物理内存时,并不需要将该页写入交换文件,下次调用时再从磁盘上的 dll 文件中载入就行了。所以系统会将该 dll 文件锁定。
14 楼所讲的 B 关机后 A 就出错,应该就是 A 系统认为该 dll 失去了锁定,再也不能按照上面的调度方式重新从磁盘载入了,所以报错。
咸清 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 csorca 的回复:]
……
[/Quote]
我觉得问题可能出自Windows的注册机制。我们也不知道它怎么搞的,貌似也没有公开吧?
咸清 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 chenjl1031 的回复:]

动态链接库DLL的代码并不是某个应用程序的组成部份,而是在运行时链接到应用程序中。与动态链接不同,静态链接方式是在链接期间把库(静态链接库)中的代码链接到可执行文件中,也就是说,在可执行文件中含有库函数的代码。
动态链接分为两阶段,即链接过程和装过程。
当应用程序调用动态链接库中的某个函数时,链接程序并不拷贝被调用函数的代码,而只是从引入库中拷贝一些指示信息,指出被调……
[/Quote]
恩,研究研究
咸清 2011-03-01
  • 打赏
  • 举报
回复
我觉得,regsvr32.exe的注册原理值得研究~~
赵4老师 2011-03-01
  • 打赏
  • 举报
回复
OleView.exe工具不能不用!
咸清 2011-03-01
  • 打赏
  • 举报
回复
LS的几位都说的不错,果断决定看 COM本质论
LX 还有要讲的吗?
没有的话结贴了~~~
csorca 2011-02-28
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 ybh37 的回复:]
引用 5 楼 csorca 的回复:

“dll处于网络中的一个位置..." , 能举个例子么 , 你这个有点前卫呀, 难道是个网络系统?

想试这个东西很简单,比方说,在局域网中有A、B两台电脑,假设B有一个可执行的EXE需要调用的DLL放在B本地目录,并且已经注册,B共享这个目录,A拷贝这个目录,不要注册它的DLL,A打开B共享目录并点击运行可执行的EXE,然后再点击运行本地的可执行的……
[/Quote]


其实我觉得把,你的A调用了B的DLL, DLL本身肯定是被完整地加载到A的内存, A的内存空间将对B的DLL所有函数入口分配内存地址, 在执行DLL目标函数的时候直接访问A的这个入口地址, 而不是B的内存地址, 你也不可能访问到(常规技术下我觉得是这样的). 这个过程里头, 是根本不需要 B机器的任何信息的. 但在实际系统设计的时候肯定为了考虑全局安全因素\系统效率\及独占模式等, B的在线主机信息应该是被记录下来的...放哪里还真不知道 ....

你说的B断线过后A会出错啥的, 这个恰恰类似于,本地程序的保护模式, 一个本地保护程序被执行了, 你是删除不掉这个程序的, 如果你用了系统低层高权限强制将物理信息修改, 系统的保护模式就会给出警告出错!!!这个过程确实间接反映了, 内存的保护模式和磁盘文件时有关联的, 不论他在任何地方....当然网络和本地的区别就是数据交互的方式不同了....原理应该差不了哪里去.

成熟的保护模式, 应该非常复杂, 那些小黑字们就喜欢钻这些空巴 , 对系统谙熟技术高超,他可以做异步注册, 其实就是告诉系统我是合法的, 并没有破坏你的保护, 但实际却是已经突破了保护限制了...这个应该就是攻进暴露漏洞了...
东方之珠 2011-02-28
  • 打赏
  • 举报
回复
动态链接库DLL的代码并不是某个应用程序的组成部份,而是在运行时链接到应用程序中。与动态链接不同,静态链接方式是在链接期间把库(静态链接库)中的代码链接到可执行文件中,也就是说,在可执行文件中含有库函数的代码。
动态链接分为两阶段,即链接过程和装过程。
当应用程序调用动态链接库中的某个函数时,链接程序并不拷贝被调用函数的代码,而只是从引入库中拷贝一些指示信息,指出被调用函数属于哪个动态链接库(.dll文件)。因此,在应用程序的可执行文件中,存放的不是被调用的函数的代码,而是DLL中该函数的内存地址。程序运行后,当需要调用该函数时,进入装入过程,把应用程序与DLL库一起装入内存,由Windows读入DLL中的函数并运行程序。
可以看出,动态链接是在应用程序被装入到内存时进行的。这样,当多个应用程序调用库中的同一个函数时,不会在内存中有该函数的多个拷贝,而是只有一份拷贝,每个应用程序的可执行文件中装入的只是该函数的内存地址,程序运行时再把应用程序代码与被调用函数代码动态链接起来,从而可以节省内存资源。同时,由于DLL与应用程序分开,即使更新DLL,也不用修改已编译好的可执行文件。
----节选自清华大学出版社《Visual basic 6.0 Win32 API 程序设计》(刘炳文 李凤华著)第1章 1.1.2 动态链接库
咸清 2011-02-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tiger_zhao 的回复:]

应该是和内存管理机制有关。
每个进程只能访问自己的虚拟地址空间,通过进程私有的页目、页表来将虚拟地址和物理地址对应。
所以DLL被调入Win32系统的全局堆栈后,引用它的不同进程的页表就可以指向它所在的同一个物理地址。
在执行时,通过切换进程环境,dll 没有变动物理地址,函数指针在不同的进程内却可以表现为不同的虚拟地址。
至于写 dll 专有的数据区,会自动复制一份,然后将页表指向复制……
[/Quote]
我慢慢理解一下……
咸清 2011-02-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 csorca 的回复:]

“dll处于网络中的一个位置..." , 能举个例子么 , 你这个有点前卫呀, 难道是个网络系统?
[/Quote]
想试这个东西很简单,比方说,在局域网中有A、B两台电脑,假设B有一个可执行的EXE需要调用的DLL放在B本地目录,并且已经注册,B共享这个目录,A拷贝这个目录,不要注册它的DLL,A打开B共享目录并点击运行可执行的EXE,然后再点击运行本地的可执行的EXE,这时A电脑调用的Dll就是源于B。我们将B电脑关机,不重新注册本地Dll下,会系统报错。根据系统日志查看Dll的注册信息。

这么长,不知道看糊涂了没有~~
  • 打赏
  • 举报
回复
搬个小板凳来听课的说
lorl2 2011-02-28
  • 打赏
  • 举报
回复
DLL只能是在本地的,也就是说必需把对方映射为本地文件系统的一个分区,WinPE加载器不用考虑这个问题。
只有进程外组件(ActiveX exe),才可以离开主EXE单独在远程主机中存活,他们之前的联系一般采用TCP或管道(管道似呼也是用TCP?135端口?)。
king06 2011-02-28
  • 打赏
  • 举报
回复
网络应用一般都是利用额外的dataspace传递信息.
jiashie 2011-02-28
  • 打赏
  • 举报
回复
我是来学习的,DLL COM DCOM (防删除)
king06 2011-02-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 ybh37 的回复:]
既然是被调入Win32系统的全局堆栈,那么我就想知道,dll的代码区、数据区都拷贝到内存中了吗?
如果这个dll处于网络中的一个位置,映射到调用这个DLL的进程的地址空间时,会不会包含dll的详细地址?[/Quote]
1.是
2.否
Tiger_Zhao 2011-02-28
  • 打赏
  • 举报
回复
网络调用指 MTS/COM+ 之类?
这应该是代理模式,实现具体功能的 dll 只在服务器上加载,本地加载的 dll 在调用者和服务器直接进行代理,它内部的确有服务器的信息。
Tiger_Zhao 2011-02-28
  • 打赏
  • 举报
回复
应该是和内存管理机制有关。
每个进程只能访问自己的虚拟地址空间,通过进程私有的页目、页表来将虚拟地址和物理地址对应。
所以DLL被调入Win32系统的全局堆栈后,引用它的不同进程的页表就可以指向它所在的同一个物理地址。
在执行时,通过切换进程环境,dll 没有变动物理地址,函数指针在不同的进程内却可以表现为不同的虚拟地址。
至于写 dll 专有的数据区,会自动复制一份,然后将页表指向复制后的物理地址。
赵4老师 2011-02-28
  • 打赏
  • 举报
回复
DCOM
加载更多回复(5)
本书是作者十余年编程生涯中的技术和经验的总结。内容涵盖了从认识CPU、Windows运行机理、编程语言的运行机理,到代码的规范和风格、分析方法、调试方法和内核优化,内有作者对许多问题的认知过程和透彻的分析,以及优秀和精彩的编程经验。 性思维(2) 第2章认识CPU 2.1 8位微处理器回顾/2.2 16位微处理 器(1) 2.2 16位微处理器(2) 2.3 32位微处理器(1) 2.3 32位微处理器(2) 2.3 32位微处理器(3) 2.4 【实例】:在DOS实模式下读取4GB内 存(1) 2.4 【实例】:在DOS实模式下读取4GB内 存(2) 第3章 Windows运行机理 3.1 内核分析(1) 3.1 内核分析(2) 3.1 内核分析(3) 3.1 内核分析(4) 3.1 内核分析(5) 3.1 内核分析(6) 3.1 内核分析(7) 3.1 内核分析(8) 3.1 内核分析(9) 3.1 内核分析(10) 3.1 内核分析(11) 3.1 内核分析(12) 3.3 GDI的结构和组成(1) 3.3 GDI的结构和组成(2) 3.4 线程的机制(1) 3.4 线程的机制(2) 3.4 线程的机制(3) 3.4 线程的机制(4) 3.4 线程的机制(5) 3.4 线程的机制(6) 3.4 线程的机制(7) 3.5 PE结构分析(1) 3.5 PE结构分析(2) 3.5 PE结构分析(3) 编程高手箴言 file:///d|/Administrator/Desktop/编程高手箴言/编程高手箴言/index.htm[2009-5-13 22:18:51] 3.1 内核分析(13) 3.2 消息的运行方式(1) 3.2 消息的运行方式(2) 3.2 消息的运行方式(3) 3.5 PE结构分析(4) 3.5 PE结构分析(5) 3.5 PE结构分析(6) 3.5 PE结构分析(7) 第4章编程语言的运行机理 第5章代码的规范和风格 5.1 环境的设置 5.1.1 集成环境的设置 5.1.2 TAB值的设置 5.1.3 编译环境的设置 5.1.4 设置herosoft.dsm宏 5.2 变量定义的规范 5.2.1 变量的命名规则 5.2.2 变量定义的地方规定 5.2.3 变量的对齐规定 5.3 代码对齐方式、分块、换行的规范 5.4 快速的代码整理方法 5.5 注释的规范 5.6 头文件的规范 5.7 建议采用的一些规则 5.8 可灵活运用的一些规则 5.9 标准化代码示例 5.10 成对编码规则 5.10.1 成对编码的实现方法 5.10.2 成对编码中的几点问题 5.11 正确的成对编码的工程编程方法 5.11.1 编码前的工作 5.11.2 成对编码的工程方法 5.11.3 两个问题的解释 第6章分析方法 6.1 分析概要 6.1.1 分析案例一:软件硬盘阵列 6.1.2 分析案例之二:游戏内存修改工具 6.2 接口的提炼 6.2.1 分离接口 6.2.2 参数分析 6.3 主干和分支 6.3.1 主干和分支分析举例 6.3.2 程序检验 6.4 是否对象化 6.5 是否DLL化 6.5.1 DLL的建立和调用 6.5.2 DLL动态与静态加载的比较 6.5.3 DLL中函数的定义 6.6 COM的结构 6.7 几种软件系统的体系结构分析 6.7.1 播放器的解码组成分析 6.7.2 豪杰大眼睛的体系结构 6.7.3 Windows 9x体系结构 编程高手箴言 file:///d|/Administrator/Desktop/编程高手箴言/编程高手箴言/index.htm[2009-5-13 22:18:51] 第7章调试方法 7.1 调试要点 7.1.1 调试和编程同步 7.1.2 汇编代码确认 7.1.3 Win32的Debug实现方法 7.2 基本调试实例分析 7.3 多线程应用的调试 7.4 非固定错误的调试 7.4.1 激活调试环境 7.4.2 正确区分错误的类型 7.4.3 常见的偶然错误 第8章内核优化 8.1 数据类型的认识 8.2 X86优化编码准则 8.2.1 通用的X86优化技术 8.2.2 通用的AMD-K6处理器x86代码优化 8.2.3 AMD-K6处理器整数x86代码优化 8.3 MMX指令的优化 8.3.1 MMX的寄存器介绍 8.3.2 MMX的工作原理 8.3.3 MMX的检测 8.3.4 MMX指令的介绍 8.4 MMX的实例一:图像的淡入淡出 8.4.1 目的 8.4.2 解决方法 8.4.3 分析 8.4.4 初步实现 8.4.5 MMX的优化实现 8.5 MMX的实例二:MMX类的实现方法 8.5.1 实现方法分析 8.5.2 实现步骤 8.5.3 检测过程 8.5.4 总结
梁肇新,豪杰超级解霸的作者 “我就是程序,程序就是我。” 梁肇新 《编程高手箴言》这本书就是梁肇新自己十余年来编程经验的集结。在名人出书成为热潮的这几年中,拥有丰富经历和感悟的梁肇新却没有跟风,这本《箴言》是他的第一本著作,可谓厚积薄发。全书通篇没有时髦的IT新名词或新思想,而是踏踏实实地对很多知识进行了深刻的剖析,这有助于为编程打下坚实的根基。只有这样,才能使开发者在飞速变化的软件领域里免于雾里看花,才能更快更深地认识许多新问题、新知识,也才能更从容地应对未来之挑战。相信这本书对广大程序员大有裨益,无论是从技术角度还是从职业生涯指导角度。 本书是作者十余年编程生涯中的技术和经验的总结。内容涵盖了从认识CPU、Windows运行机理、编程语言的运行机理,到代码的规范和风格、分析方法、调试方法和内核优化,内有作者对许多问题的认知过程和透彻的分析,以及优秀和精彩的编程经验. 目录: 第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 总结 416
梁肇新开发技术总结,值得借鉴 这是我在网上能够找到的最清晰的版本,分享给大家 目录: 第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动态与静态加载的比较

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧