Я не знаю, как получить доступ к атрибуту размера изнутри газа. Как альтернатива, как насчет замены .size
на
hhh:
.long .-_my_stub # 32-bit integer constant, regardless of the size of a C long
и
extern const uint32_t gfoo asm("hhh");
// asm("asm_name") sidesteps the _name vs. name issue across OSes
Я не могу попробовать это здесь, но я ожидаю, что вы сможете printf("%ld\n", gfoo);
. Я попытался использовать .equ
, так что это было бы константой, а не выделением памяти для него, но я так и не получил ее правильную работу.
Это оставляет вопрос относительно цели атрибута .size
. Зачем устанавливать это, если вы не можете прочитать это? Я не эксперт, но у меня есть теория:
Согласно документам , для выходов COFF .size
должно быть в пределах .def/.endef
. Глядя на .def , мы видим, что он используется для Начать определение информации отладки для имени символа .
Хотя у ELF нет такого же требования к вложенности, кажется правдоподобным предположить, что отладка - это тоже цель. Если это предназначено только для использования отладчиками, то (вроде) имеет смысл, что нет никакого доступа к нему из ассемблера.