Asm koodinpätkä, joka tulostaa pätkän tekstiä. Koodattu niin, että binääri sisältää ainoastaan perus-ASCII -merkkejä, joten voit opetella tuon ulkoa ja lesoilla kavereillesi miten koodaat konekieltä Microsoft® Muistiolla® ;-)
Binääri on siis tällainen (kopioi vaikka Muistioon, ja tallenna nimellä "hello.com"):
hf3X-62PZhJDX-ADPYh81X-31Phg8X-97P^h53X-72P_1<=)hello world$
'hello world'-tekstin paikalle voit laittaa mitä haluat, mutta muista terminoida merkkijono '$'-merkillä. Rivinvaihtojakin voi luonnollisesti käyttää.
Muista käyttää Microsoft® *DOS*-linkkeriä, niin homma toimii (ks. make.bat)
hello.asm
; A HelloWorld DOS-application (.com) which can be reproduced
; with any standard, ASCII, text-editor (see binary).
; Coded by thefox <thefox@cracked.org> 2003
;
; Assembling with MASM (where link is the DOS-linker):
; ml /AT /Cp /c /nologo hello.asm
; link /nologo /tiny hello.obj,hello.com,,,,
.model tiny, stdcall
.386
.code
option casemap :none
org 100h
start:
push (offset my_string) + 3236h
pop ax
sub ax, 3236h
push ax
pop dx ; dx = offset foo
push 09h + 4441h
pop ax
sub ax, 4441h
push ax
pop cx ; cx = 9h
push 5h + 3133h
pop ax
sub ax, 3133h
push ax ; ax = 5h (which contains a far jump to int21)
push (offset my_ret) + 3739h
pop ax
sub ax, 03739h
push ax
pop si ; si = ptr my_ret
push ('=' xor 0c3h) + 3237h
pop ax
sub ax, 3237h
push ax
pop di ; di = '=' ^ 0c3h
xor [si], di ; convert '=' to ret (opcode 0c3h)
my_ret:
byte "=)" ; return to address 5, from where it jumps to int21
; handler. because 0 is on top of the stack, from int21 it will
; return to the beginning of the PSP, which contains
; "int 20h" instruction (0cdh, 020h), therefore terminating
; the program.
my_string byte "hello world", "$"
end startmake.bat
ml /AT /Cp /c /nologo hello.asm link /nologo /tiny hello.obj,hello.com,,,,
Toimi kuin toimikin, vaikuttava juttu!
kommentit vois olla suomeks sit ois parempi.
Kirjoitan kommentit _aina_ englanniksi, ja eipä niitä tuossa muutenkaan niin hirveästi ole. Viimeinen kommentti:
"Ret:aa osoitteeseen 5, mistä ohjelma hyppää int21-käsittelijään. Koska 0 on pinon päällimmäisenä, int21:stä ohjelma hyppää PSP:n alkuun, josta löytyy "int 20h"-käsky (0cdh, 020h), joka lopettaa ohjelman".
Hyvä.. mä teenki nyt kaikki asm-ohjelmani tämmösiks xD
"käännä se käsin" (tm)
Vielä hienomman näköistä on, jos lataat jonkin hexaeditorin (esim. ultraedit) ja laitat ensin seuraavat heksat:
BA OC 01 B4 09 CD 21 B8 00 4C CD 21 näiden jälkeen voitkin kirjoittaa haluamaasi tekstiä (hexoina). Lopetusmerkin ($) hexa on 24.
Heikki, ääh, ei tuo ole hienoa, ei heksaeditoria löydy Windowsista defaulttina (ellei debuggia lasketa) :)
aika jännä :)
Ho? Kirjotin ton binäärin HP 200LX taskutietsikkaani (oldschool mustavalko tiiliskivi) ja tietenkään en löytänyt ^ merkkiä. Kokeilin ilman ja tää jämähti. Jäi vaan se _ alaviiva vilkkumaan ja piippaa jos painaa jotain nappia. :)
EDIT: Edes virtanappi ei toimi. :D
Täyty repii patterit irti et sai buutattua. :P
Jeejee. Tässä onkin muille näytettävää
heksaeditorina toimii vaikka masm32...
koitappa avata qbeellä tehty exe joka tekee saman ku tuo muistiolla niin heti paljo isompi
Helloworldin hexat: BA OC 01 B4 09 CD 21 B8 00 4C CD 21 48 65 6C 6C 6F 20 77 6F 72 6C 64 21 24
Dosissa jos kirjotaa ton koodin edittiin, tallentaa sen ja kokeilee sitä niin se jumittuu.
Aihe on jo aika vanha, joten et voi enää vastata siihen.