.comm 是什么意思?

发布于 2024-07-13 05:13:35 字数 896 浏览 15 评论 0原文

我刚刚翻译了这个程序,

#include <stdio.h>

int dam[1000][1000];


int main (int argc, const char * argv[]) {
    // insert code here...
    printf("Hello, World!\n");
    return 0;
}

使用 gcc 生成汇编,

    .cstring
LC0:
    .ascii "Hello, World!\0"
    .text
.globl _main
_main:
    pushl   %ebp
    movl    %esp, %ebp
    pushl   %ebx
    subl    $20, %esp
    call    L3
"L00000000001$pb":
L3:
    popl    %ebx
    leal    LC0-"L00000000001$pb"(%ebx), %eax
    movl    %eax, (%esp)
    call    L_puts$stub
    movl    $0, %eax
    addl    $20, %esp
    popl    %ebx
    leave
    ret
.comm _dam,1000000,5
    .section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5
L_puts$stub:
    .indirect_symbol _puts
    hlt ; hlt ; hlt ; hlt ; hlt
    .subsections_via_symbols

.comm 是什么意思? dam 使用堆空间、栈空间还是数据空间?

I just translated this program,

#include <stdio.h>

int dam[1000][1000];


int main (int argc, const char * argv[]) {
    // insert code here...
    printf("Hello, World!\n");
    return 0;
}

to assembly using gcc producing,

    .cstring
LC0:
    .ascii "Hello, World!\0"
    .text
.globl _main
_main:
    pushl   %ebp
    movl    %esp, %ebp
    pushl   %ebx
    subl    $20, %esp
    call    L3
"L00000000001$pb":
L3:
    popl    %ebx
    leal    LC0-"L00000000001$pb"(%ebx), %eax
    movl    %eax, (%esp)
    call    L_puts$stub
    movl    $0, %eax
    addl    $20, %esp
    popl    %ebx
    leave
    ret
.comm _dam,1000000,5
    .section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5
L_puts$stub:
    .indirect_symbol _puts
    hlt ; hlt ; hlt ; hlt ; hlt
    .subsections_via_symbols

What does .comm mean? Does dam use heap space, stack space or data space?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

陪你搞怪i 2024-07-20 05:13:35

来自 as 手册:

..comm 声明一个名为
象征。 连接时,共用一个符号
在一个目标文件中可以合并
相同的定义或通用符号
另一个目标文件中的名称。 如果ld
没有看到定义
符号——只是一个或多个常见的
符号——然后它将分配长度
未初始化的内存字节。 长度
必须是绝对表达式。 如果ld
看到多个常见符号
相同的名字,并且他们并不都有
大小相同,会分配空间
使用最大尺寸。

使用 ELF 时,.comm 指令
采用可选的第三个参数。 这
是所需的对齐方式
符号,指定为字节边界
(例如,对齐 16 意味着
的最低有效 4 位
地址应该为零)。 这
对齐必须是绝对对齐
表达,并且它必须是一个力量
二。 如果 ld 分配未初始化的
对于公共符号的记忆,它将
放置时使用对齐方式
象征。 如果没有指定对齐方式,
as 将设置对齐方式
两个小于或的最大幂
等于符号的大小,最多
最多 16 个。

From the as manual:

..comm declares a common symbol named
symbol. When linking, a common symbol
in one object file may be merged with
a defined or common symbol of the same
name in another object file. If ld
does not see a definition for the
symbol--just one or more common
symbols--then it will allocate length
bytes of uninitialized memory. length
must be an absolute expression. If ld
sees multiple common symbols with the
same name, and they do not all have
the same size, it will allocate space
using the largest size.

When using ELF, the .comm directive
takes an optional third argument. This
is the desired alignment of the
symbol, specified as a byte boundary
(for example, an alignment of 16 means
that the least significant 4 bits of
the address should be zero). The
alignment must be an absolute
expression, and it must be a power of
two. If ld allocates uninitialized
memory for the common symbol, it will
use the alignment when placing the
symbol. If no alignment is specified,
as will set the alignment to the
largest power of two less than or
equal to the size of the symbol, up to
a maximum of 16.

愿与i 2024-07-20 05:13:35

.comm 名称、大小、对齐方式

.comm 指令在数据段中分配存储空间。 存储由标识符名称引用。 大小以字节为单位,并且必须是正整数。 名称无法预定义。 对齐方式是可选的。 如果指定了对齐方式,则名称的地址将与对齐方式的倍数对齐。

来源:https://docs.oracle.com/cd/E26502_01/ html/E28388/eoiyg.html

.comm name, size, alignment

The .comm directive allocates storage in the data section. The storage is referenced by the identifier name. Size is measured in bytes and must be a positive integer. Name cannot be predefined. Alignment is optional. If alignment is specified, the address of name is aligned to a multiple of alignment.

Source: https://docs.oracle.com/cd/E26502_01/html/E28388/eoiyg.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文