PE文件:PE加载的过程

1、将PE文件从磁盘中读出
2、根据PE结构获取镜像大小,再申请一段可读可写可执行的内存,并填充为0
3、将读取的数据映射到内存中
4、修复导出导入入表
5、修复重定位
6、跳转到PE入口点进行执行

0x00 将PE文件从磁盘中读出

使用ReadFile()读取数据 。

0x01 根据PE结构获取镜像大小,再申请一段可读可写可执行的内存,并填充为0

//获取镜像大小
DWORD SizeOfImage = GetSizeOfImage(pFileBuff);
//在进程中开辟一块内存空间
PEAddress= (char*)VirtualAlloc(NULL,
        dwSizeOfImage,
        MEM_COMMIT | MEM_RESERVE,
        PAGE_EXECUTE_READWRITE);
RtlZeroMemory(PEAddress, SizeOfImage);

0x02 将读取的数据映射到内存中

这里需要注意的地方是内存粒度对齐的问题。
在磁盘中对齐粒度为0x200;
再内存中的对齐粒度为0x1000.
在这里插入图片描述

0x03 修复导入表

https://blog.csdn.net/weixin_43742894/article/details/105155489

0x04 修复重定位表

https://blog.csdn.net/weixin_43742894/article/details/105155482

0x05 跳转到PE入口点进行执行

发布了19 篇原创文章 · 获赞 21 · 访问量 993

猜你喜欢

转载自blog.csdn.net/weixin_43742894/article/details/105235074
PE