Найти тему

Альтернатива JMP

Ранее я писал о том, чем можно заменить команду RET. Сегодня тот же вопрос, но для команды JMP.

Допустим, у нас есть такая программа:

Программа совершенно бессмысленная. Более того, она никогда не завершится, потому что с помощью команды JMP мы всё время возвращаемся в начало программы.

Однако некий смысл в этой программе всё же есть - она показывает, как используется инструкция JMP.

А вот в следующем примере мы получаем тот же результат, но без использования JMP:

-2

То есть сначала мы адрес метки start записываем в стек. И это будет точка возврата из процедуры. А потом вызываем команду RET, которая выполняет выход из процедуры на адрес, указанный в вершине стека.

Таким образом, несмотря на то, что никакой процедуры в программе нет, и тем более мы её не вызывали, мы “обманули” процессор, подсунув ему адрес несуществующей процедуры и выполнив команду выхода из процедуры. То есть фактически мы выполнили безусловный переход - те же действия, которые выполняет команда JMP.

Спросите - зачем это надо? Да просто так. Из любопытства. А также для понимания работы компьютерных систем. Ну а хитрые хакеры загадочно улыбнутся )))

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.