Может ли произойти сбой сегментации для чтения памяти?

Я думаю, что чтение памяти не должно вызывать каких-либо проблем, например

char *d="";
char *d2="test";
memcmp(d,d2,10);

Можно memcmp() когда-нибудь не получится?

1 ответ

Решение

Ваше предположение неверно, поскольку чтение памяти по адресу, не отображенному в адресном пространстве процесса, приведет к SEGV, В частности, чтение адреса 0 (почти на всех архитектурах) и чтение пространства памяти ядра (если оно вообще отображается), но в целом чтение логической памяти, в которую физическая память не отображается как читаемая.

В вашем примере вы работаете memcmp на байтах, которые не выделены, что является неопределенным поведением. Вероятно, он будет читать мусор из стека или сегмента данных, но у вас нет возможности узнать это. Например, d может оказаться прямо на вершине стека, и вы, таким образом, можете выйти за пределы стека в не отображенную память (стек обычно уменьшается).

Другие вопросы по тегам