pe知识

c00005防止内存出错,

内核重载:操作系统启动内核.exe文件,重载用peloader启动操作系统的exe
filebuffer是直接从硬盘加载到内存
imagebuffer是文件映像,做了内存对齐
imageBuffer 是fileBuffer的拉伸,可以运行啦
imageBase是内存镜像基址。这里的大小不确定。
执行的时候还要做地址转换,把虚拟地址转换成物理地址。
第一节 代码 第二节数据 第三节资源

OEP(AddressOfEntryPoint):

程序入口地址,位于第一节代码的某一位置。

oep+imageBase:

内存的入口点
模块对齐。模块ob的e的dll就是模块。

pe loader:

加载对齐filebuffer-> imagebuffer加载不确定是否占用。内存地址占用。

SizeOfImage,imagebuffer的大小,内存中整个pe的映射文件,可以比实际大,但必须是SectionAlignmaent(内存对齐)的整数倍
SizeOfHeaders :

所有头+节表按照文件对齐后的大小,严格按照FileAlignment(文件对齐)对齐,否则加载会出错。(dos+pe标记+标准pe头+可选pe+节表)
节表:
- dos
- 垃圾数据哈哈
- pe标记(4字节)
- 标准pe头
- 可选pe头
- 节表(说明:节的文件中从那里开始,有多大,从内存那里开始,有多大,有几节就有几项)

CheckSum :

校验和,pe文件2个字节2个字节加,存不下自然溢出,用于判断文件是否修改,可逆,检验目的,(驱动程序,系统重要dll,系统检查和,可以改)(自己脑洞:先算出来,改了pe之后,修改这个和以前一样,2333)

SizeOfStackReserver: 初始化时保留的堆栈大小
SizeOfStackCommit: 初始化时实际提交的大小
SizeOfHeapReserver:初始化时保留的堆的大小
SizeOfHeapCommit: 初始化时实践提交的大小

NumberOfRvaAndSizes: 目录项数目 32位16
16个结构,每个结构都有特别的含义,编译器用的,纪录了编译器往exe加入的数据在哪里,干什么的。(导入表,导出表,重定向表,资源表,调试信息表等等)

LPVOID ReadPEFile(LPSTR lpszFile){
FILE *pFile=NUll;
DWORD fileSize = 0;
LPVOID pFileBuffer=null;
//打开文件
pFile=fopen(lpszFile,"rb");
if(!pFile){
printf("无法打开exe文件");
return NULl;

}
//读取文件大小
fseek(pFile,0,SEEK_END);
fileSize=ftell(pFile);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值