SetJmp/LongJmp: Почему это бросает segfault?

Сам SSH обеспечивает средство сообщения, он ничего не знает о каталогах. Так как можно определить, какую удаленную команду выполниться (это - по умолчанию - оболочка), я запустил бы там.

7
задан Bill the Lizard 12 January 2010 в 02:30
поделиться

2 ответа

Вы можете только longjmp () вернуть вверх стек вызовов. При вызове longjmp (b_buf, 1) что-то начинает идти не так, потому что кадр стека, на который ссылается b_buf , больше не существует после longjmp (a_buf) .

Из документации для longjmp :

Подпрограммы longjmp () не могут быть вызваны после возврата из подпрограммы, которая вызвала процедуры setjmp ().

Это включает «возврат» через a longjmp () вне функции.

13
ответ дан 6 December 2019 в 10:52
поделиться

Стандарт говорит об этом longjmp () (7.13.2.1 Функция longjmp):

Функция longjmp восстанавливает среду, сохраненную при последнем вызове макрос setjmp в том же вызове программы с соответствующим jmp_buf аргумент. Если такого вызова не было или функция, содержащая вызов макроса setjmp завершил выполнение в промежуточный период

с помощью сноски, которая немного поясняет это:

Например, выполняя оператор return или потому что другой вызов longjmp вызвал переход к вызову setjmp в функции ранее в наборе вложенных вызовов.

Таким образом, вы не можете longjmp () назад и вперед по вложенным setjmp / longjmp наборы.

5
ответ дан 6 December 2019 в 10:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: