在分析了一些二进制文件后,我注意到 .text、.data、.bss 等部分并不是真正相邻的。他们之间似乎有隔阂,这是为什么呢?
部分之间的差距
逆向工程
二元分析
可执行
2021-07-10 10:00:15
1个回答
部分已对齐,因此下一部分不会自动从当前部分的末尾开始。磁盘和内存上的部分具有不同的对齐方式。磁盘上的部分通常按 512 字节对齐,这是磁盘扇区的传统大小(存储在 中IMAGE_OPTIONAL_HEADER.FileAlignment)。在内存中,它们通常是页面对齐的(存储在 中IMAGE_OPTIONAL_HEADER.SectionAlignment)。它允许加载器在不同的部分应用不同的内存保护权限,因为权限是逐页应用的。示例:.text可以有PAGE_EXECUTE_READwhile.data可能只有PAGE_READONLY权限,如果.data不对齐,则适合最后.text一页的内容将具有PAGE_EXECUTE_READ权限而不是PAGE_READONLY。