Как создать частную метку в функции в clang сборке Intel? - PullRequest
0 голосов
/ 11 февраля 2019

Как я могу создать собственные метки в функциях сборки, которые можно использовать только из определяющей функции, но нельзя использовать из других функций, например, для целей перехода?

В приведенном ниже примере я нехотите, чтобы .private_label был доступен с _main.Тем не менее, он прекрасно компилируется с использованием clang -S -masm=intel example.s -o example.

. Ранее я видел эту функцию в NASM, но теперь я решил переключиться на Clang.

Бонус: где я могу посмотретьэта информация сама?Я уже провел некоторые исследования сам.

.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 

1 Ответ

0 голосов
/ 11 февраля 2019

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

...