#c #cpp
Как сделать так, чтобы после выполнения return перейти в любую другую часть программы, вместо точки вызова функции? Ответ даже предположить не могу :(
Ответы
Ответ 1
Это одно из безумных заданий на собеседованиях, когда предлагают сделать полную чушь и написать код, за который в жизни следует отрывать руки, вместо того, чтобы проверить реальные знания кандидата? Как вариант, задефайнить return: #include#define return goto ll void main() { return; printf("You shouldn't see this\n"); ll: printf("After return\n"); } Вариант второй - подменить адрес возврата, смоделировав переполнение буфера (рассказывая про стек вызовов, предлагаю этот пример студентам). Замечания: (1) работает только на 32-х битах, (2) после вывода строки программа, разумеется, рухнет. Оба недочета легко поправить, предлагаю сделать это самостоятельно. #include void non_called_function() { printf("You shouldn't see this\n"); } void f() { int testArray[1]; // Замещаем адрес возврата в main адресом non_called_function testArray[2] = (int) non_called_function; } int main() { f(); return 0; } Ответ 2
Если нужно, чтобы переход происходил именно по return, это одно дело. Если же просто в конце функции, то посмотрите в сторону long_jmp. Хотя, на самом деле, я бы такими вещами занимался в самом крайнем случае.Ответ 3
А, если использовать безусловный переход goto ?
Комментариев нет:
Отправить комментарий