首页 > 解决方案 > 了解一些“帮助”gnu-as 指令

问题描述

我已经main.c用大约两行代码编译了一个程序,以查看哪些指令gcc/gas添加到未优化的程序集文件中,使用:

gcc -o main.s main.c -S

我可以在gas 指令页面上查找每个指令的简明描述,但希望有人可以为其中一些指令提供更多背景信息以及它的实际用途(例如,在下游gdblinker下游的任何地方)。这是完整的程序集文件,其中包含以下问题:

    .file   "main.c"
    .text
    .globl  main
    .type   main, @function
main:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    movl    $4, -8(%rbp)
    movl    $6, -4(%rbp)
    movl    -8(%rbp), %edx
    movl    -4(%rbp), %eax
    addl    %edx, %eax
    popq    %rbp
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc
.LFE0:
    .size   main, .-main
    .ident  "GCC: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0"
    .section    .note.GNU-stack,"",@progbits
  1. .file:基于此声明似乎已过时了此声明将来可能会消失:它仅被认为与旧as程序兼容。. 但鉴于它仍然存在,目前在哪里或如何使用它?

  2. .ident: 这似乎与做相同的事情gcc --version。除了提供有关用于发出命令的“gcc”的帮助信息之外,这是否还被使用,或者它是如何使用的?

  3. .section .note...: 我见过.section .text, .section .bss, .section .text, ...但我从来没有遇到过 a .note,并且执行 ctrl-f 搜索note不会在此页面上提供任何内容。这条线对三个参数做了什么?和@progbits

  4. .size:鉴于指令不占用空间,这给了我们第一条语句的长度main-pushq %rbp减去最后一条语句ret,即main函数的长度。但同样,这是什么用途?此外,它在as页面上说它只允许在 .def/.endef 对内。,但这不在那些对中,对吧?

  5. .section .text.startup,"ax",@progbits- 什么是text.startupax看起来它意味着可分配+可执行,但是什么或在哪里text.startup

标签: cassemblygccx86gnu-assembler

解决方案


推荐阅读