【问题标题】:What does "#APP" in the assembly file generated by compiler mean?编译器生成的汇编文件中的“#APP”是什么意思?
【发布时间】:2018-12-28 13:47:01
【问题描述】:

我写了以下代码:

// a.c
#include <stdlib.h>
#include <sys/syscall.h>
#include <unistd.h>

_Noreturn void _start()
{
    register int syscall_num asm ("rax") = __NR_exit;
    register int exit_code   asm ("rdi") = 0;

    // The actual syscall to exit
    asm volatile ("syscall"
        : /* no output Operands */
        : "r" (syscall_num), "r" (exit_code));
}

然后使用clang-7 -Oz -pipe -flto -c a.c编译它并使用llc-7 -filetype=asm a.o将其变成人类可读的汇编文件a.o.s

    .text
    .file   "a.c"
    .globl  _start                  # -- Begin function _start
    .type   _start,@function
_start:                                 # @_start
    .cfi_startproc
# %bb.0:
    pushq   $60
    .cfi_adjust_cfa_offset 8
    popq    %rax
    .cfi_adjust_cfa_offset -8
    xorl    %edi, %edi
    #APP
    syscall
    #NO_APP
    retq
.Lfunc_end0:
    .size   _start, .Lfunc_end0-_start
    .cfi_endproc
                                        # -- End function

    .ident  "clang version 7.0.1-svn348686-1~exp1~20181211133235.57 (branches/release_70)"
    .section    ".note.GNU-stack","",@progbits

在上面的程序集中,指令#APP出现在syscall之前,这是我编写的程序集,指令#NO_APP出现在它之后。

我知道这一定与asm的使用有关,比如防止它被优化出来,但是我在谷歌上搜索后找不到它的任何文档。

多谢了。

【问题讨论】:

    标签: c gcc assembly directive inline-assembly


    【解决方案1】:

    至少从历史上看,编译器告诉as,它可以使用快速解析模式来解析纯编译器输出,然后切换回完整解析来自 inline-asm 的块。在进入此模式的文件的前面某处应该有一个#APP#NO_APP 退出此模式。

    我不确定as 是否对那个提示做了任何事情,所以它甚至可能根本不寻找#NO_APP,只是像对待任何其他评论一样对待它。

    在实践中,它分隔了来自内联 asm 模板的文本块,而不是编译器生成的 asm。除此之外,它不会做任何事情,如果您出于某种原因手动编辑 asm,则完全可以将其删除。

    【讨论】:

    • 你确定快速解析器消失了吗?我相信它仍然存在,但我不确定。
    • @fuz:我不确定确定,但我想我之前读过。我刚刚尝试组装一个以#APP 开头的手写文件,cmets 和.equ 定义在其中运行良好。我没有尝试.macro
    【解决方案2】:

    它会删除空格和它与 #NO_APP 之间的 cmets。

    在这种情况下,它被放在这里以防万一您在 asm() 中有注释

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 2011-09-11
      • 2013-04-10
      • 2021-05-17
      • 2016-06-18
      • 2011-06-12
      相关资源
      最近更新 更多