pe是如何载入内存的 PE的内存加载过程
1、PE文件格式简介
PE文件是Windows操作系统下的可执行文件格式,缩写为Portable Executable,它包含了程序代码、数据、资源以及导入和导出信息等。PE文件有一个特点,就是它把整个程序(除了资源文件)都放在一个单独的文件中,并且这个文件已经被操作系统分配好了空间。因此,当我们运行一个PE文件时,它会被系统载入到内存中。
在PE文件中,有两个重要的信息:Image Base和Section Table。Image Base表示PE文件在内存中的基址,Section Table则记录了PE文件中每个Section的信息,比如虚拟地址、大小等。当系统载入一个PE文件时,它需要先确定Image Base,然后根据Section Table将PE文件中的内容载入内存的相应位置。
2、PE文件的映像
在Windows操作系统下,加载PE文件到内存中时,采用的是文件映像的概念。也就是说,操作系统在内存中为PE文件创建了一个内存映像,将PE文件中的不同部分映射到这个内存映像中的相应部分。这些部分包括代码段、数据段、BSS段、导入表、导出表等。如此一来,内存中的格式就和磁盘上的文件一样了。
PE文件在内存中的映像,采用了与磁盘上的布局相同的连续空间布局,并且这个布局有助于提高二进制文件在内存中的访问速度。同时,PE文件在内存中的映像中不包括调试信息和资源信息等脱离关键路径的信息,这些信息会被放在磁盘文件中,只有在需要用到它们时才会被载入内存。
3、调用LoadLibrary函数
LoadLibrary是Windows系统中的一个函数,它可以将一个DLL文件载入内存中。在实现程序动态装载DLL文件功能时,我们可以调用LoadLibrary函数将DLL文件载入内存中,然后调用GetProcAddres函数获取函数地址,最后调用该函数即可。这种方式与PE文件的载入类似,都需要将文件中的数据载入到内存中。
当我们调用LoadLibrary函数时,它会返回一个模块句柄(HMODULE),这个模块句柄就是载入的DLL文件在内存中的起始地址。我们可以使用这个模块句柄来获取DLL文件中各种函数的地址,并调用这些函数。
4、基于文件映像的操作
除了加快数据的访问速度外,使用基于文件映像的操作还有一个好处,就是可以避免物理内存不足的问题。在使用基于文件的操作时,文件被映射到虚拟内存中,而不是直接读入物理内存。因此,如果物理内存不足,系统就可以将一部分的虚拟内存中的映像交换到磁盘上,从而释放物理内存,保证程序的正常运行。
仅限于静态链接的程序通常在加载时将PE文件载入内存中,而动态链接的程序则需要在运行时动态载入DLL文件。无论哪种情况,文件映像都可以帮助我们高效地进行数据读取、访问以及内存资源的管理。
扫一扫关注我们
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件至 baisebaisebaise@yeah.net举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
评论