【问题标题】:What does alignment means in .comm directives?.comm 指令中的对齐是什么意思?
【发布时间】:2022-01-23 18:44:27
【问题描述】:

我创建了两个文件 - 文件.s

.data
.global hello
hello: .int 23

file1.s

.bss
.comm hello,32,4
.text
.global _start
_start:
mov $hello,%rbx
movl (%rbx),%eax
mov $60,%rax
xor %rdi,%rdi
syscall

现在链接时,ld:警告:file.o 中符号 `hello' 的对齐 1 小于 file1.o 中的 4 我没有得到对齐部分。来自Doc

当使用 ELF 或(作为 GNU 扩展)PE 时,.comm 指令采用可选的第三个参数。这是符号的所需对齐方式,为 ELF 指定为字节边界(例如,对齐 16 意味着地址的最低有效 4 位应为零)

现在,为什么最低有效 4 位应该为零?我假设因为 12 位是符​​号的大小,而现在要与 16 对齐的其余 4 位是 0 ?那么为什么会有来自 ld 的警告呢?

【问题讨论】:

标签: assembly x86-64


【解决方案1】:

注意错误信息:“file.o 中符号 'hello' 的对齐 1 小于 4”。问题不在于.comm,而是第一个文件中的.int 没有指定对齐方式。要修复它,您可以在 .int 之前放置一个 .balign 4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 2014-09-24
    • 2011-05-09
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    相关资源
    最近更新 更多