;;Retrovirus v1.0 ;;By Ray Cromwell (rjc@gnu.ai.mit.edu) ;;USA ;;December 1991 ;;Technique: Subvert other program, so that it impstomps and copies ;; our virus for it. ;; (not optimized, yet) ;; Idea came from Tierra (artificial life program), ;; see comp.theory.cell-automata for more details. rnaoffset equ virusrna-memptr exoff equ (833-(endprog-startprog)+(execaddr-dest)) pend equ endprog-ptr ;; ;; Impstomp. Opposing warrior usually executes this. ;; startprog dat #0 impstomp mov #0, startprog imp2 mov #0, startprog mov #0, startprog mov #0, startprog jmp impstomp ;; ;; Constants and pointers ;; jmp0 jmp 0 jmp1 jmp 1 jmp5 jmp 5 jmpvec jmp 600+rnaoffset ;make sure jmp points to "virusrna" routine memptr dat #-600 tmp dat #0 imp mov 0, 1 size dat #0 ptr dat #0 dest dat #0 delta dat #0 ;; ;; Startup ;; start mov stopper, virusrna ;inialize some constants ; and vectors mov jmp5, tmp ; sub jmp0, tmp ;Find jmp5-jmp0 mov jmp1, delta ; sub jmp0, delta ;Find jmp1-jmp0 ;; ;; Scan loop ;; mainloop cmp dabomb, @memptr ;scan for nonzero code jmp subvert ;if non zero, subvert it! s4 sub #5, memptr ;sub 5 from ptr add tmp, jmpvec ;add 5 to jmp instruction tjmp jmp mainloop ;loop ;; ;; Bombing after subversion ;; mov njmp, tjmp ;fix vector mov memptr, delta ;temporary register add #60, delta ;fudge for time-delay bombit cmp @delta, tagid ;about to bomb us? jmp bomb ;bomb! sub #(endprog-startprog+6), delta ;skip us! bomb mov dabomb,