#c #segmentation-fault
#c #ошибка сегментации
Вопрос:
У меня есть эксплуатируемый c
код, который принимает пользовательский ввод. Я могу распечатать содержимое стека, с помощью $p
которого выводится 10-е значение, хранящееся в стеке. Однако, когда я пытаюсь запустить ту же программу, но с $n
ней segfaults . Что не имеет смысла. Segfaults означает, что я пытаюсь получить доступ к памяти, которая мне не принадлежит. Однако эта память действительно «принадлежит мне», поскольку я могу ее распечатать. Почему это происходит?
К сожалению, я не могу использовать почтовый индекс для него, потому что он предназначен для назначения. Поэтому я должен оставить этот вопрос абстрактным.
Ответ №1:
$n
означает запись количества символов, напечатанных по адресу, на который указывает 10-й элемент стека, а не фактический 10-й элемент стека. Это означает, что если 10-й элемент не указывает на допустимую, доступную для записи память, чего, скорее всего, нет, то при попытке записи в него произойдет ошибка segfault.