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 start
make.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
Aika tehokkaasti toi Assembly pakkaa...
Assembly _ei_ pakkaa mitään. Assembly on vain tiivistä koodia, qb:n komennot sisältävät vaikka mitä kebabia.
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.