Базовый факториал Для начала нам понадобится обычная программа вычисления факториала.
factorial: push ebp mov ebx, eax factorial_start: sub ebx, 1 cmp ebx, 0 je factorial_end mul ebx jmp factorial_start factorial_end: pop ebp ret
Здесь все довольно просто. Самомодифицирующийся факториал В алгоритме вычисления факториала есть два места, в которых изменение значения при выполнении имеет смысл: начальное значение и множитель. Технические особенности Во-первых, самомодифицирующиеся программы имеют свою специфику. По умолчанию nasm собирает программу без возможности ее дальнейшей самостоятельной модификации, потому что раздел .text из соображений безопасности отмечается как не перезаписываемый. Чтобы изменить флаги этого раздела для активации возможности записи потребуется задействовать objcopy и кастомную программу.
Мой скрипт для сборки этих программ лежит здесь. Начальное значение В исходном коде начальное число передается через регистр eax. Чтобы использовать для этого самомо