Заказать курсовые, контрольные, рефераты...
Образовательные работы на заказ. Недорого!

Самомодифицирующиеся программы. 
Программа-тренажер "ЛамПанель"

РефератПомощь в написанииУзнать стоимостьмоей работы

Поскольку данные находятся в той же области памяти, что и программы, программа может изменять свой код во время выполнения. Например, для защиты от взлома может быть использовано шифрование: основной код программы зашифрован, и она сама себя расшифровывает при запуске. Теперь остается добавить (также в текстовом редакторе) этот фрагмент в конец файла lampanel.rom. Новая процедура будет доступна… Читать ещё >

Самомодифицирующиеся программы. Программа-тренажер "ЛамПанель" (реферат, курсовая, диплом, контрольная)

Поскольку данные находятся в той же области памяти, что и программы, программа может изменять свой код во время выполнения. Например, для защиты от взлома может быть использовано шифрование: основной код программы зашифрован, и она сама себя расшифровывает при запуске.

Пример самомодифицирующейся программы:

ассемблер

псевдокод

jmp decode.

main:

data ba6b.

data ba98.

data 27a8.

data 4444.

decode:

mov @main, r0.

mov 4, r1.

loop:

xor bbbb,(r0)+.

sub 1, r1.

jnz loop.

jmp main.

переход на блок расшифровки начало основной части в этом и следующем словах будет «mov 123, R0» .

здесь будет «system 13» .

здесь будет «stop» .

начало блока расшифровки.

R0:= начало зашифрованного блока.

R1:= 4; нужно расшифровать 4 слова начало цикла.

расшифровка: xor с маской BBBB16

уменьшить счетчик если счетчик не ноль, перейти на начало цикла перейти на основную программу.

Расширение ПЗУ

Пользователь может добавить свои подпрограммы в ПЗУ. Для этого нужно сначала отладить подпрограмму, а затем сохранить ее в специальном формате с помощью кнопки или пункта меню «Программа — Сохранить как ПЗУ». Например, напишем подпрограмму, которая переставляет биты числа в обратном порядке, используя циклический сдвиг через бит переноса:

ассемблер

псевдокод

mov 1234, R0.

call reverse.

stop.

reverse:

push R1.

push R2.

mov 10, R2.

xor R1, R1.

next-bit:

rcl 1, R0.

rcr 1, R1.

sub 1, R2.

jnz next-bit.

mov R1, R0.

pop R2.

pop R1.

ret.

R0:= 123416

вызов подпрограммы стоп начало подпрограммы сохранить R1 в стеке сохранить R2 в стеке.

R2:= 16 = 1016

R1:= 0.

старший бит R0 попадает в бит переноса бит переноса попадает в старший бит R1.

R2:= R2 — 1.

если R20, перейти к метке next-bit.

R0:= R1.

восстановить R2 из стека восстановить R1 из стека возврат из подпрограммы.

Отладив эту программу, уберем верхние три строчки, оставив только процедуру, и применяем команду меню «Программа — Сохранить как ПЗУ». Полученный файл (он будет иметь расширение.rom) открываем в любом текстовом редакторе (например, в Блокноте) и добавляем в начало комментарий:

; Перестановка битов R0.

; в обратном порядке.

;———————————;

  • 2E10 PUSH R1
  • 2E20 PUSH R2
  • 01D2 MOV 10, R2
  • 0010
  • 0911 XOR R1, R1
  • 9E00 RCL 1, R0

AE01 RCR 1, R1.

  • 03D2 SUB 1, R2
  • 0001
  • 4D0D JNZ 000A

FFF4.

  • 0110 MOV R1, R0
  • 3E20 POP R2
  • 3E10 POP R1
  • 0D00 RET

Теперь остается добавить (также в текстовом редакторе) этот фрагмент в конец файла lampanel.rom. Новая процедура будет доступна при следующем запуске программы «ЛамПанель».

Показать весь текст
Заполнить форму текущей работой