Простая и интересная задачка по C++
Всем привет, я сам ещё новичок в C++(< 2 лет изучаю), но уже что-то понимаю и решил сделать задачу на основы языка для совсем зелёных, для решения из C++ вам нужно будет знать функции, cout и указатели.
Итак, задача:
Дан следующий код: http://pastebin.com/5ehUmhZB
Результат его выполнения:
Hello, World
secret function 42
Вопросы:
1 Почему выводится secret function 42, если вызывается только printHelloWorld();
2 Откуда взялось число 42?
Подсказки:
1 Не потому что 42 - это ответ на «главный вопрос Жизни, Вселенной и Всего Остального»
2 На других архитектурах и компиляторах результат может быть другим, я компилил в linux gcc 5.4.0 x64
P.S. Если не верите, можете убедиться сами https://www.tutorialspoint.com/viewproject.php?URL=compile_cpp_online.php&PID=0Bw_CjBb95KQMTW9WaTliUXRqc1U
За такие манипуляции со стеком - расстрел через повешение без права досрочного освобождения.
В стеке есть адрес возврата из printHelloWorld, вместо него вставлен адрес func1.
"var", который в другой функции, тоже находится в стеке и здесь мы его фиксим на значение 42.
Короче, такой фигнёй лучше на ассемблере заниматься -- понятнее и портабельнее будет.
Такого количества говнокода я в одном месте 100 лет не видел! = )
Лучше бы код научился переносимый писать, а то умников которые знают как стек имппользуется полно, а вот приложение под несколько архитектур написать - нет.