PE结构 --->8.PE对齐的概念 文件对齐VS磁盘对齐
目录PE结构中对齐概念详解原理磁盘文件对齐File Alignment, 0x200内存对齐Section Alignment, 0x1000关系与CPU页管理详细步骤PE文件加载到内存的对齐过程读取DOS头和PE头解析可选头读取节表处理重定位执行入口点内存以及磁盘PE结构介绍内存对齐磁盘对齐的重要性动静态分析PE的区别要搞明白dump状态PE结构中对齐概念详解PE文件对齐是指节在磁盘文件和内存映像中的边界对齐机制确保高效存储和访问。磁盘文件对齐通常为0x200512字节源于磁盘扇区大小内存对齐为0x10004KB源于CPU页管理单位。原理PE对齐的核心源于操作系统和硬件的协作磁盘文件对齐File Alignment, 0x200文件存储时每个节的大小和位置必须是文件对齐值的倍数PE可选头中的FileAlignment字段默认0x200。这是因为硬盘以扇区512字节为最小读写单位对齐可减少I/O操作碎片提高读写效率。如果不对齐系统需额外处理填充导致性能损失。内存对齐Section Alignment, 0x1000文件加载到内存时每个节被映射到虚拟地址空间以页为单位x86/x64系统页大小4KB即0x1000。CPU使用分页机制管理内存内存分为固定大小页页表跟踪访问权限如读/写/执行。对齐确保每个节起始于新页避免一个页包含多个节的不同权限防止安全漏洞如缓冲区溢出跨节。如果文件节大小不是页倍数加载器Windows的ntdll.dll会用0填充尾部扩展到页边界。这可能导致“膨胀”小文件在内存中占大空间。关系与CPU页管理CPU通过MMU内存管理单元处理分页页大小固定为0x1000以优化TLB翻译后备缓冲器缓存和减少页表开销。文件对齐小于内存对齐是为了节省磁盘空间而内存对齐优先安全和性能。图片中左侧文件紧凑200h右侧内存膨胀1000h体现了这种权衡。详细步骤PE文件加载到内存的对齐过程读取DOS头和PE头加载器打开文件读前64字节验证“MZ”然后从e_lfanew偏移跳到PE头验证“PE\0\0”。解析可选头从IMAGE_OPTIONAL_HEADER获取FileAlignment0x200和SectionAlignment0x1000。读取节表根据NumberOfSections读取每个节的VirtualAddress、VirtualSize内存大小、PointerToRawData文件偏移、SizeOfRawData文件大小。计算内存布局每个节的内存起始地址 ImageBase VirtualAddress必须是SectionAlignment的倍数。如果VirtualSize SizeOfRawData超出部分填0如果VirtualSize不是0x1000倍数扩展到下一个页边界。映射和填充使用VirtualAlloc分配内存页将文件数据复制到对应位置未占部分用ZeroMemory填0。应用页保护如.text为PAGE_EXECUTE_READ。处理重定位如果实际加载基址 ! ImageBase调整地址但与对齐无关。执行入口点跳转到AddressOfEntryPoint开始执行。内存以及磁盘PE结构介绍磁盘也就是ox200内存就是ox1000同样是400的位置显示的数据是不一样的也就是dos头 dos体 NT头 节表 这四处都是相同的 但是走到了节数据段磁盘和内存段就是不一样了也就是说在磁盘PE结构转换成内存结构后会进行一个拉伸的操作为什么要拉伸 也就是磁盘是0x200(512) 内存是0x1000的效率是最高的(4096)对齐也就是通过0x200进行一个数据段的对齐存放 内存就是0x1000进行存放内存对齐磁盘对齐的重要性PELoader内存重载dump技术都要使用到到对齐分析动静态分析PE的区别要搞明白也就是我们在静态分析的时候 节数据都是进行了加密以及混淆的所以我们在动态内存分析的时候其实加密和混淆就出来了也就是我们在运行的时候在加密和解密 我们的节数据都是一个解密的后的数据了dump状态运行成内存状态 我们就可以进行一个反打包的状态而这个状态我们称之为dump状态 也就是把内存数据打包成文件状态(也就是进行一个解密的处理)加密后的数据就显现了(1小时30分钟)。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2483134.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!