Day1

1、PE文件(portable executable)

EXE : 这是一个可执行文件

​ 文件值属性:010F(H)

​ 加载基址:0x00400000

DLL : 这是一个动态链接库文件,EXE 文件在运行时会调用 DLL 文件中的代码和资源

​ 文件值属性:IMAGE_FILE_HEADER.Characteristics:210(H)

​ 加载基址:0x10000000

加载过程:调用CreateProcess启动,生产内核对象,分配4GB进程空间,系统加载器加载dll文件以及完成重定位, IAT, 接着创建进程的主线程,之后主线程为每个DLL调用_DLLMainCRTStartup函数,然后主线程根据 EXEGUI(图形化)程序还是CUI(控制台)程序执行MainCRTStartup
最后一步执行WinMain(或者main函数):
1、ReadFile读取文件头信息,判断是否是PE文件
2、获取映像总大小,申请可读可写可执行的内存全部填为0
3、获取区段信息,循环读取每一个区段内容,将ReadFile读取的数据映射到内存中
4、修复重定位
5、修复IAT
6、创建线程,线程回调指向OEP

2、基础知识