Исполнение команд ассемблера на лету - Assembler

Узнай цену своей работы

Формулировка задачи:

Привет ребят! Сразу к делу. Предполагается софт, в котором формируется некий блок памяти в ОЗУ динамический, в этом блоке опкоды процессора (intel64/OS - Windows). Софт зациклен (main loop), на каждой итерации нужно проверить кое-какое условие и считать следующую команду для исполнения из ОЗУ из этого динамического блока. Не.. ну понятно, что это медленно, всякие кеши к чёрту летят и тд... всё это дело потом будет оптимизироваться, сейчас же меня интересует сам принцип, как вообще это сделать и на чём подобный софт лучше писать? На FASM? То есть программа софта как бы не последовательная, это "мутируемый софт" или самомодифицируемый как бы. То есть дальнейшие инструкции для выполнения заранее не известны и определяются вначале каждой новой итерации. Нужно как-то хитро в EIP пихать следующую инструкцию или как? Я нуб в ассемблерах (относительно), но не нуб во всём остальном

Решение задачи: «Исполнение команд ассемблера на лету»

textual
Листинг программы
nop              ; какой-то код..
dec  byte[$+5]   ; меняем инструкцию впереди себя! JNE превратился в JE
nop              ;
nop              ;
jne  @metka      ; модифицируемая инструкция
nop              ;
nop              ;
inc  byte[$+4]   ; был PUSH, стал POP
nop              ;
push ax          ;
nop              ; и т.д.

Объяснение кода листинга программы

  1. nop - Команда ничего не делать
  2. dec - Декаллирование (уменьшение на 1) регистра byte[$+5]
  3. nop - Команда ничего не делать
  4. nop - Команда ничего не делать
  5. jne - Команда перехода, если равенство не выполнено (modified instruction)
  6. nop - Команда ничего не делать
  7. nop - Команда ничего не делать
  8. inc - Увеличение на 1 регистра byte[$+4]
  9. nop - Команда ничего не делать
  10. push ax - Команда сохранения регистра ax в стеке
  11. nop - Команда ничего не делать
  12. ...
  13. ...
  14. ...
  15. ...
  16. ...
  17. ...
  18. ...
  19. ...
  20. ...

Оцени полезность:

5   голосов , оценка 4 из 5