Сегодня делал упражнение с вызовом fgets со сборки. Для передачи файла FILE * в файл я написал mov rdx, [stdin]
.В сборке Intel x64 почему нужно размещать квадратные скобки вокруг stdin
Но почему это должно быть в квадратных скобках? Потому что мне не нужно значение этого указателя как раз самого указателя. Следует отметить, что lea rdx, [stdin] также не работает. Как я помню, это приводит к тому, что SIGSEGV отправляется в программу.
Как я понимаю, квадратные скобки в операнде mov
команда такая же, как и указатель разыменования в C. Также я знаю, что libc динамически связан с моим исполняемым файлом во время выполнения и отображается где-то между стеком и кучей адресного пространства виртуальной памяти программы.
YASM, glibc, Linux x64.
@EmployedRussian: Я оставил тег glibc при редактировании, так как это был вопрос о 'FILE * stdin'. (Разумеется, ответ был не связан с этим, но я мог представить другого человека, который искал ту же проблему, думая, что это связано с glibc.) Также есть тег 'libc'; было бы более целесообразным? –
@PeterCordes Но 'FILE * stdin' не имеет ничего общего с GLIBC: каждый другой libc предоставляет его. И я не думаю, что для тега 'libc' вызывается: вопрос не о библиотеке, а о глобальной переменной типа указателя. –