Assembly GNU汇编程序在节的末尾添加不必要的填充

Assembly GNU汇编程序在节的末尾添加不必要的填充,assembly,arm,Assembly,Arm,考虑GNU汇编器的以下汇编器代码snipper: .section .text .align 4 .string "text" 如果没有任何填充,则会产生一个5字节的部分,对齐方式为2^4=16。但是,我验证了GNU汇编程序(ARM目标)在节的末尾添加了填充,从而使节的长度是16的倍数。这似乎是不必要的,因为对齐保证是关于该部分的开始,而不是结束。那么,为什么汇编器会在末尾添加填充呢?这可以被禁用吗 将上述汇编程序snipper放入名为test.s的文件中,并运行以下操作: arm-none-

考虑GNU汇编器的以下汇编器代码snipper:

.section .text
.align 4
.string "text"
如果没有任何填充,则会产生一个5字节的部分,对齐方式为2^4=16。但是,我验证了GNU汇编程序(ARM目标)在节的末尾添加了填充,从而使节的长度是16的倍数。这似乎是不必要的,因为对齐保证是关于该部分的开始,而不是结束。那么,为什么汇编器会在末尾添加填充呢?这可以被禁用吗

将上述汇编程序snipper放入名为test.s的文件中,并运行以下操作:

arm-none-eabi-gcc -c -o test.o test.s
arm-none-eabi-objdump -x test.o

请注意,文本部分的对齐方式是2^4=16,并且.text部分的大小是0x10而不是5。

这与ARM目标有关。普通汇编程序(运行
gcc
objdump
)显示长度为5的
text
部分。正常情况下,您指的是英特尔目标?我刚刚检查了clang/llvm 3.6.0,集成汇编程序创建了一个大小为5的.text部分。这不是llvm中第一个与ARM相关的错误,如果它是一个错误的话(我不这么认为)。是的,对不起,我指的是Intel目标。不管怎样,大多数部分都与不同的访问属性相关-因此在大多数平台上,你最终会解包到4K页面,因为这是MMU或MPU的粒度。我建议不要担心它。。。