Ответ 1
c3
- это инструкция RET
. Когда машина x86 переходит к этой строке, интерпретируемой как код, она выполнит RET
и, следовательно, скачет прямо назад, ничего не выполнив (остальная часть строки игнорируется). Поскольку стандартное соглашение о вызове на x86 состоит в том, чтобы поместить ваше возвращаемое значение в eax
, но код ничего не делал перед возвратом, все, что уже было в eax
, все еще будет там, и в позиции для кода C для интерпретации он как "вернулся".
Это сильно зависит от того, что ваш компьютер является x86, и что вам разрешено отображать данные и указатели на функции (и выполнять результат) - очень системный взлом. Это не стандартное совместимое или портативное C любым растяжением!
(\xXX
- синтаксис C-escape для вставки одиночных нечитаемых символов в строки через их код ASCII в шестнадцатеричном формате, если вы не знали эту часть.)