gpt4 book ai didi

c++ - 使 GCC 的 ASM 标签可用于标记化

转载 作者:行者123 更新时间:2023-11-30 17:30:30 28 4
gpt4 key购买 nike

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

但是,根据我在编译器创建抽象语法树后收集的信息,汇编器第二次调用预处理器来创建符号标签,以找出所有静态依赖项等等...

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

当然,从用GCC编译的程序员的角度来看,预处理器只在一开始就被调用一次,以创建一个非常非常长的源文件。随后进行 asm 标记。那么至少有可能在 GCC 内部按照书本来做到这一点吗?

最佳答案

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

关于c++ - 使 GCC 的 ASM 标签可用于标记化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25115235/

28 4 0