gpt4 book ai didi

assembly 标签前缀

转载 作者:行者123 更新时间:2023-12-04 12:17:39 24 4
gpt4 key购买 nike

有人可以解释这些标签在组装中的区别吗?

Lfoo:

.Lfoo:

foo:

.foo:

some documentation但有点不清楚。我用 ELF 系统试过这个:
$ cat foo.S
Laaa:
jmp Laaa

.Lbbb:
jmp .Lbbb

aaa:
jmp aaa

.bbb:
jmp .bbb

$ clang -c foo.S -o foo.o
$ objdump -D foo.o

foo.o: file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <Laaa>:
0: eb fe jmp 0 <Laaa>
2: eb fe jmp 2 <Laaa+0x2>

0000000000000004 <aaa>:
4: eb fe jmp 4 <aaa>

0000000000000006 <.bbb>:
6: eb fe jmp 6 <.bbb>

这似乎证实了 .L是 ELF 的本地符号,但这些符号显然不必以 . 开头。或 _ .我知道 _用于 C 中的名称修改,但 . 的意义何在? ?

最佳答案

名称修改方案和用于生成本地符号(即未出现在符号表中的符号)的前缀取决于您的平台和汇编程序。没有任何单一的组合在任何地方都有效。以下两个约定似乎很常见:

在遵循传统 UNIX 约定的目标(例如 aout、Mach-O 和 COFF 目标)上,C 符号用前导下划线 _ 修饰。和本地标签以 L 开头.

在 ELF 目标上,C 符号没有被修饰,局部标签以 .L 开头。 .

一些汇编器(例如 nasm)偏离了本地标签的这些约定。例如,在 NASM 上,本地标签以单个句点开头 .与您的目标无关。

我不知道 UNIX 之外的约定是什么(Windows 类似于 UNIX,因为它是 COFF 目标)。

关于 assembly 标签前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51150860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com