使GCC的ASM标签可用于标记化

时间:2014-08-04 09:11:59

标签: c++ c gcc assembly build

所以,让我警告你们,我不太了解GCC的构建过程如何使用预处理器。特别是为汇编程序和连接符命名汇编符号。

但是,从编译器创建抽象语法树之后我收集的内容中,汇编器第二次调用预处理器来创建符号标签以找出所有静态依赖关系等等...... / p>

现在,这可能听起来很奇怪,但我需要访问ASM标签并在代码中使用它们并使用相同的预处理器(#str)将它们字符串化,这是具体的。我可以使用 asm 手动进行标记。但我需要访问内部定义的构建

当然,从程序员在GCC中编译的角度来看,预处理器只在一开始就被调用一次,以创建一个非常非常长的源文件。 asm标签后来发生。所以甚至可以通过GCC中的书来做到这一点,至少?

1 个答案:

答案 0 :(得分:0)

gcc -c foo.c 会为您提供obj文件。使用objdum -S foo.o查看asm代码。

例如:

$gcc -c foo.c
$objdump -S foo.o

foo.o:     file format elf64-x86-64

Disassembly of section .text:

0000000000000000 <test>:
   0:   55                      push   %rbp
   1:   48 89 e5                mov    %rsp,%rbp
   4:   48 83 ec 10             sub    $0x10,%rsp
   8:   48 89 7d f8             mov    %rdi,-0x8(%rbp)
   c:   48 8b 45 f8             mov    -0x8(%rbp),%rax
  10:   8b 10                   mov    (%rax),%edx
  12:   b8 00 00 00 00          mov    $0x0,%eax
  17:   89 d6                   mov    %edx,%esi
  19:   48 89 c7                mov    %rax,%rdi
  1c:   b8 00 00 00 00          mov    $0x0,%eax
  21:   e8 00 00 00 00          callq  26 <test+0x26>
  26:   c9                      leaveq
  27:   c3                      retq