Ранее я писал о том, чем можно заменить команду RET. Сегодня тот же вопрос, но для команды JMP.
Допустим, у нас есть такая программа:
Программа совершенно бессмысленная. Более того, она никогда не завершится, потому что с помощью команды JMP мы всё время возвращаемся в начало программы.
Однако некий смысл в этой программе всё же есть - она показывает, как используется инструкция JMP.
А вот в следующем примере мы получаем тот же результат, но без использования JMP:
То есть сначала мы адрес метки start записываем в стек. И это будет точка возврата из процедуры. А потом вызываем команду RET, которая выполняет выход из процедуры на адрес, указанный в вершине стека.
Таким образом, несмотря на то, что никакой процедуры в программе нет, и тем более мы её не вызывали, мы “обманули” процессор, подсунув ему адрес несуществующей процедуры и выполнив команду выхода из процедуры. То есть фактически мы выполнили безусловный переход - те же действия, которые выполняет команда JMP.
Спросите - зачем это надо? Да просто так. Из любопытства. А также для понимания работы компьютерных систем. Ну а хитрые хакеры загадочно улыбнутся )))
На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.