进程资源管理器有时将EXE显示为“打包的图像”,但这是什么意思。

我发现的是:使用/ZI选项编译exe(使用Visual C++ 2010)会生成打包图像,但/Zi不会。为什么会有这样的差异?

顺便说一句:使用/ZI编译的DLL也被视为“打包图像”,并标记为紫色。

c++ - Windows EXE/DLL : what is a  "packed image"-LMLPHP

最佳答案

“打包镜像”是一种压缩可执行代码的文件,目的是使文件更小。典型的文件大小减少量徘徊在50%左右。它在运行时使用“加载程序”将数据解压缩回可执行代码,然后再开始执行。在过去的磁盘空间有限和网络带宽有限的情况下,此功能很有用。

如今,在使用TB磁盘和兆位网络的情况下,这是一种气味,还可以利用打包来隐藏恶意代码。当然,Process Explorer对其进行不同着色的原因。

没有记录PE用于检测包装的确切启发式方法。当然不是,那将很容易规避。这不是小事,没有实现打包的标准方法。粗略地讲,当它看起来像不可执行代码时,它将查看可执行文件中的各个部分并引发“蓝旗”。

是的,当您使用/ZI时,将会有很多东西。更重要的是链接器的/INCREMENTAL选项,当您使用/ZI时会自动打开。使用该选项,您可以在调试时编写代码,即“编辑+继续”选项。并快速重新链接可执行文件,而链接程序不必完全重新生成该文件。仅当可执行文件中有很多空白可用于添加新的机器代码字节时,此方法才起作用。那是一个蓝旗。

当然,这不是真正的问题,您的用户只会看到程序的Release版本。这是在没有/ZI和/INCREMENTAL的情况下构建的。

10-08 08:36