1 DLL延迟加载技术
在Windows中加载程序时,需要把该程序的代码和所需的DLL复制到内存空间中。如果所需的DLL不存在,则程序将会报错。如果程序所需的DLL比较多,则程序启动会消耗较多时间。可以采用DLL延迟加载技术减少程序启动时间。使用该技术的程序,在启动时无需加载所需DLL,在代码试图引用DLL中包含的一个符号时才将DLL加载。
2 VS2015设置DLL延迟加载
使用VS2015编写程序时,可以通过VS2015为该程序设置延迟加载的DLL。在VS2015中,选择菜单栏“项目->XXX属性”,之后在弹出的属性页左侧的“配置属性”中选择“链接器->输入”,之后在右侧的“延迟加载的DLL”中输入要延迟加载的DLL名,如图1所示。

图1 设置延迟加载的DLL
3 通过PEView查看延迟加载的DLL信息
在《基于PEview分析PE文件》中提到,PE文件的NT头包括Signatrue、IMAGE_FILE_HEADER和IMAGE_OPTIONAL_HEADER三部分。其中,IMAGE_OPTIONAL_HEADER中包含了16个Data Directory,其中第14个是“DELAY IMPORT Descriptors”,就是保存了延迟加载的DLL信息的地址,如图2所示。
![]()
图2 DELAY IMPORT Descriptors
从图2中可以看到,延迟加载的DLL信息保存在0x00B03000的地址当中,该地址为相对虚拟地址,即RVA。从PEView中可以看到,延迟加载的DLL信息实际上是保存在了“SECTION.didat”中的“DELAY IMPORT Descriptors”中。图3为RVA是0x00B03000中的内容。

图3 延迟加载DLL名字信息
从图3中可以看到 ,加载的DLL的名字信息保存在了RVA的0x00A7DBD0中。从PEView中可以看到,该RVA位于“SECTION.rdata”中的“DELAY IMPORT DLL Names”中,如图4所示。

图4 DELAY IMPORT DLL Names
本文详细介绍了DLL延迟加载技术的工作原理及其在VS2015中的应用,通过具体步骤展示了如何设置DLL延迟加载,以及如何使用PEView查看DLL延迟加载信息。
1万+

被折叠的 条评论
为什么被折叠?



