加密与解密-基础知识
大端小端:
大端:高位字节存入低地址,低位字节存入高地址,依次排列
小端:低位字节存入低地址,高位字节存入高地址,反序排列
虚拟内存的实现方法和过程如下 :
1)当一个应用程序被启动时,操作系统创建一新进程,并给每一个进程分配2GB的虚拟地址
2)虚拟内存管理器将应用程序的代码映射到那个应用程序的虚拟地址中的某个位置,并把当前所需要的代码读取到物理地址中。
3)如果使用动态链接库DLL,DLL也被映射到进程的虚拟地址空间,在需要的时候才被读入物理内存;
4)其他项目的空间是从物理内存中分配的,并被映射到虚拟地址空间中;
5)应用程序通过使用它的虚拟地址空间中的地址开始执行,然后虚拟内存管理器把每次的内存访问映射到物理位置。
应用程序是不会直接访问物理地址的;
虚拟内存管理器通过 虚拟地址的访问请求,控制所有的物理地址访问;
每个应用程序都有相互独立的4GB寻址空间,不同应用程序的地址空间是隔离的;
DLL程序没有自己的私有空间,它们问题被映射到其他应用程序的地址空间中,作为其他应用程序的一部分运行。
.rdata 的区块表明它是一个只读区块 。
.text 是在编译或汇编结束时产生的一种块,它的内容全是指令代码
.rdata 是运行期只读数据
.data 是初始化的数据块
.idata 包含其他外来DLL的函数及数据信息,即输入表;
.rsrc 包含模块的全部资源,如图标、菜单、位图等。
PE相关名词解释如下:
1)入口点(Entry Point)
PE文件执行时的入口点,也就是说,程序在执行时的第一行代码的地址应该就是这个值。
2)文件偏移地址 (File Offset)
当PE文件储存在磁盘上时,各数据的地址称做文件偏移地址。文件偏移地址从PE文件的第一个字节开始计数,起始值为0
3)虚拟地址(Virtual Address,VA)
由于Windows程序运行在386保护模式下,所以程序访问存储器所使用的逻辑地址称为虚拟地址,又称为内存偏移地址。与实地址模式下的分段地址类似,虚拟地址也可写成:段:偏移量的形式,
例:0167:00401000
0167: 这是段选择值,其数据保存在CS段选择器里同一程序 在不同系统环境下,此值可能不同,一般没需要关心此值。
00401000:此处表示 内存的虚拟地址,一般来说 ,同一程序的同一条指令在不同系统环境下,此值相同。
4)基地址(ImageBase)
文件执行时将被映射到指定内存地址中,这个初始内存地址称为基地址。 这个值是由PE文件本身设定的。