《PE总结 》– 导出表
当PE文件被执行的时候,Windows装载器将文件装入内存并将导入表中登记的DLL文件一并装入,再根据DLL文件中的函数导出信息对被执行文件的IAT表进行修正。 Windows 在加载一个程序后就在内存中为该程序开辟一个单独的虚拟地址空间,这样的话在各个程序自己看来,自己就拥有几乎任意地址的支配权,所以他自身的函数想放在哪个地址自己说了算。有一些函数很多程序都会用到,为每一个程序写一个相同的函数看 […]
当PE文件被执行的时候,Windows装载器将文件装入内存并将导入表中登记的DLL文件一并装入,再根据DLL文件中的函数导出信息对被执行文件的IAT表进行修正。 Windows 在加载一个程序后就在内存中为该程序开辟一个单独的虚拟地址空间,这样的话在各个程序自己看来,自己就拥有几乎任意地址的支配权,所以他自身的函数想放在哪个地址自己说了算。有一些函数很多程序都会用到,为每一个程序写一个相同的函数看 […]
一、导入表简介 在编程中常常用到“导入函数”(Import functions),导入函数就是被程序调用但其执行代码又不在程序中的函数,这些函数的代码位于一个或者多个DLL中,在调用者程序中只保留一些函数信息,包括函数名及其驻留的DLL名等。 于磁盘上的PE 文件来说,它无法得知这些输入函数在内存中的地址,只有当PE 文件被装入内存后,Windows 加载器才将相关DLL 装入,并将调用输入函数的 […]
好了,我们继续接着上一篇来讲解节表和表。 三、节表和节 1.首先我们先来了解Windows是如何将PE文件映射到内存的。 在执行一个PE文件的时候,windows 并不在一开始就将整个文件读入内存的,而是采用与内存映射文件类似的机制。也就是说,windows 装载器在装载的时候仅仅建立好虚拟地址和PE文件之间的映射关系。当且仅当真正执行到某个内存页中的指令或者访问某一页中的数据时,这个页面才会被从 […]
PE(Portable Executeable File Format,可移植的执行体文件格式),使用该格式的目标是使链接生成的EXE文件能在不同的CPU工作指令下工作。 可执行文件的格式是操作系统工作方法的真实写照。Windows操作系统中可执行程序有好多种,比如COM、PIF、SCR、EXE等,这些文件的格式大部分都继承自PE。其中,EXE是最常见的PE文件,动态链接库(大部分以dll为扩展名 […]
1.前面已经在MFC六大关键技术之仿真中描述了大概的原理,现在我们来继续深入这个问题。 2.MFC把消息分为三类: ①命令消息(WM_COMMAND):命令消息意味着 “使用者命令程序做某些操作”。凡由UI对象产生的消息都是这种命令消息,可能来自菜单或加速键或工具栏按钮,并且都以WM_COMMAND呈现,如何分辨来自各处的命令消息?SDK程序主要靠消息的wParam识别之,MFC程序 […]
1.其实Document/View不是什么新东西,Xerox PARC实验室是这种观念的滥觞。它是Smalltalk环境中的关键性部分,在那里它被称为Model-View-Controller(MVC)。其中的Model就是MFC的Document,而Controller相当于MFC的Document Template。 2.Document在MFC的CDocument里头被实例化。 […]
1.首先MFC程序需要哪些函数库? Windows C Runtime函数库 LIBC.LIB C Runtime函数库的静态链接版本 MSVCRT.LIB C Runtime函数库的动态链接版本 MSVCRTD.LIB […]
1.永久保存机制,其实就是用来保存我们创建的对象。由于每一个对象都有不同的状态,所以我们需要把对象的这些状态保存起来,这个和NEW出来一个对象是不同的,NEW出来的对象中的数据都是一些初始化的数据,有的时候我们已经对数据做出了修改,所以我们需要把我们自己用的对象给保存起来。 我们希望有一个专门负责Serialization的函数,就叫做Serialize好了,假设现在我的Document类名称为C […]
1.六大关键技术: ①:MFC程序的初始化过程 ②:RTTI(Runtime Type Information) 运行时类型识别 ③:Dynamic Creation 动态创建 ④:Persistence 永久保存 ⑤:Message Mapping 消息映射 ⑥:Message Routing 消息传递 2.MFC数个之最重要的类的层次关系: CMyWinApp theApp; v […]
1.对象的属性有两大成员,一是成员变量、二是成员函数。把数据声明为private,不允许外界随意存取,只能通过特定的接口来操作,这就是面向对象的封装特性。 2.隐藏的this指针。 编译器实际上为你做出来的代码是: CRect::setcolor(2, (CRect*)&rect1); CRect::setcolor(3, (CRect*)&rect2);   […]