为何PE文件内存镜像大小与OptionalHeader->SizeOfImage值不一致?
PE内存镜像大小与SizeOfImage不一致的原因
动态分配的内存区域
程序运行时通过VirtualAlloc等API申请的内存块会被计入进程内存总大小,但SizeOfImage仅描述PE文件本身映射到内存的预期大小,不包含这类运行时新增的内存。节区对齐的自动调整
PE节区在内存中按SectionAlignment对齐,若最后一个节区对齐后的总大小超过SizeOfImage的设定值,系统加载器会自动扩展内存镜像大小以满足对齐要求,导致实际内存大小大于SizeOfImage。外部注入的代码/数据
调试器(比如你使用的x64dbg)或其他注入工具会向进程内存中写入额外代码/数据,这些区域不属于原始PE文件的范围,会增加内存镜像的总大小。SizeOfImage值设置错误
若PE文件的SizeOfImage被手动修改或编译时配置错误,导致其值小于实际加载所需的内存空间,加载器会自动调整内存镜像大小到符合要求的最小值,从而出现两者不一致的情况。
内容的提问来源于stack exchange,提问作者zolik
相关产品推荐
相关产品推荐

