PE

PE文件结构(一) 基本结构

2015-05-07

参考 书:《加密与解密》 视频:小甲鱼 解密系列 视频 exe,dll都是PE(Portable Execute)文件结构。PE文件使用的是一个平面地址空间,所有代码和数据都被合并在一起,组成一个很大的结构。先看2张图,来大概了解一下PE文件结构。 PE文件的框架结构 通过这张图(开始在下面),我们可以知道PE文件的大概结构,PE文件是由 DOS头,PE文件头,块表,块,调试信息 这些部分组 ...

PE

PE文件结构(五)基址重定位

2015-05-07

参考 书:《加密与解密》 视频:小甲鱼 解密系列 视频 基址重定位 链接器生成一个PE文件时,它会假设程序被装入时使用的默认ImageBase基地址(VC默认exe基地址00400000h,dll基地址10000000h),并且会把代码中所有指令中用到的地址都使用默认的基地址(例如 程序代码中 push 10001000,就是把10000000h当做了基地址,把push 10001000写入 ...

PE

PE文件结构(四) 输出表

2015-05-07

参考 书:《加密与解密》 视频:小甲鱼 解密系列 视频 输出表 一般来说输出表存在于dll中。输出表提供了 文件中函数的名字跟这些函数的地址, PE装载器通过输出表来修改IAT。 IMAGE_OPTIONAL_HEADER中的 DataDirectory[0] 提供了输出表的RVA。输出表是以一个IMAGE_EXPORT_DIRECTORY结构 开始的。 IMAGE_EXPORT_DIREC ...

PE

PE文件结构(三) 输入表

2015-05-07

参考 书:《加密与解密》 视频:小甲鱼 解密系列 视频 输入表 输入函数,表示被程序调用但是它的代码不在程序代码中的,而在dll中的函数。对于这些函数,磁盘上的可执行文件只是保留相关的函数信息,如函数名,dll文件名等。在程序运行前,程序是没有保存这些函数在内存中的地址。当程序运行起来时,windows加载器会把相关的dll装入内存,并且将输入函数的指令与函数真在内存中正的地址联系起来。输入 ...

PE

PE文件结构(二) 区块,文件偏移与RVA转换

2015-05-07

参考 书:《加密与解密》 视频:小甲鱼 解密系列 视频 区块 在区块表 后面的就是一个一个区块,每个区块占用对齐值的整数倍,一般的文件都有代码块 跟 数据块( 它们的名字一般为.text 跟 .data 但这是可以修改的)。每个区块的数据具有相同的属性。编译器先在obj中生成不同的区块, 链接器再按照一定的规则合并不同obj跟库中的快。例如每个obj中肯定有.text 块, 连接器就会把它们 ...