#assembly #nasm #symbols
#сборка #nasm #символы
Вопрос:
В документации NASM говорится:
Единственными символами, которые могут использоваться в качестве первого символа идентификатора, являются буквы, . (со специальным значением: см. Раздел 3.9), _ и ?.
Мне нужно вызвать внешнюю процедуру, символ которой начинается с ведущего $
. К сожалению, в документах не указано, как избежать $ или как справиться с ограничением.
Кто-нибудь знает, как указать внешний символ с начальным знаком доллара?
Комментарии:
1. Я думаю, вы можете заключить имя символа в какие-то кавычки. Вы проверили руководство по NASM?
2. @fuz Я ссылался на руководство; и нет, я ничего не смог найти по этому поводу. Я пытался использовать «, ‘, `. Должен признать, что я все еще учусь писать сборку x86_64 с помощью NASM.
3. @JulianKirsch Хм … в данном случае я считаю, что это невозможно.
4. Обратите внимание, что
mov eax, [$foo]
выполняется сборка, ноobjdump -drwC
показывает, что онаfoo
не$foo
ссылается на символ. Удвоение$
to$$foo
приводит к синтаксической ошибке. (В NASM начальное значение$
устраняет неоднозначность между именами символов и именами регистров, например,$eax
является символом с таким именем.)5. Сработает ли это для вас?
ld --defsym=nasm.foo=$foo
Ответ №1:
Мне нужно вызвать внешнюю процедуру, символ которой начинается с ведущего
$
. К сожалению, в документах не указано, как избежать $ или как справиться с ограничением.
В документации это не объясняется, потому что это невозможно. extern
Директива всегда будет игнорировать начальное значение $
(нет никакой двусмысленности между регистром rax
и меткой rax
, поскольку регистр не может использоваться в объявлении метки). Первый фактический символ любого идентификатора должен быть классифицирован как NCT_IDSTART
, иначе он недействителен.