我怎样才能创造只能从定义函数中使用汇编函数的私人标签,但不能从其它功能例如使用跳转目标?
在下面的例子中,我不想.private_label
从_main
到达。然而,它编译就好使用clang -S -masm=intel example.s -o example
。
我曾经看到过在NASM这个功能,但现在我已经决定改用锵。
奖励:在哪里可以查看这些信息了自己?我已经做了一些研究自己。
.intel_syntax noprefix
.globl _main
.text
_f:
push rbp
mov rbp, rsp
.private_label:
mov rsp, rbp
pop rbp
ret
_main:
push rbp
mov rbp, rsp
jmp .private_label
mov rax, 0x5
mov rsp, rbp
pop rbp
ret
未标记.global
标签从其他模块访问。与.L
开始标签还没有进入符号表。
有没有办法让一个标签从同一模块无法访问,但你可以得到与编号的标签类似的效果。 10个标签0
到9
只能与语法0b
访问的“前一个标签0
”和0f
为“下一个标签0
。”如果你周围的标签相同数量的两个标签,它是不可以参考它从外面。例如:
# the label is inaccessible here
0:
# the label is accessible here using 0f
jmp 0f
# our label
0: ud2
# the label is accessible here using 0b
0:
# the label is inaccessible here
请注意,没有什么能够阻止别人从只是猜测被分配您的标签结束地址和跳跃那里。我不知道你想达到什么。
对于进一步的文档,请参考GNU汇编手册。随LLVM分布汇编器支持此功能的子集。请注意,如果你是在MacOS编程,因为它似乎,正在使用的汇编可能是MacOS的汇编。请参考手册页(1)有关此工具的详细信息。