Метки, которые не отмечены .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).