Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Assembly: ASCII-binääri Helloworld

Sivun loppuun

thefox [03.05.2003 20:56:02]

#

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,,,,

Antti Laaksonen [04.05.2003 01:59:28]

#

Toimi kuin toimikin, vaikuttava juttu!

kaviaari [04.05.2003 10:40:17]

#

kommentit vois olla suomeks sit ois parempi.

thefox [05.05.2003 09:53:35]

#

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".

Tatu Peltola [10.05.2003 12:48:37]

#

Hyvä.. mä teenki nyt kaikki asm-ohjelmani tämmösiks xD

Toni-S [23.07.2003 10:48:18]

#

"käännä se käsin" (tm)

Heikki [17.02.2004 19:23:15]

#

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.

thefox [05.05.2004 23:51:32]

#

Heikki, ääh, ei tuo ole hienoa, ei heksaeditoria löydy Windowsista defaulttina (ellei debuggia lasketa) :)

tejeez [02.08.2004 14:49:38]

#

aika jännä :)

Meitsi [04.10.2004 22:39:15]

#

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

Meitsi [04.10.2004 22:42:21]

#

Täyty repii patterit irti et sai buutattua. :P

temu92 [08.05.2006 00:32:58]

#

Jeejee. Tässä onkin muille näytettävää

moptim [11.11.2006 13:57:07]

#

heksaeditorina toimii vaikka masm32...

Dude [25.07.2007 13:57:55]

#

koitappa avata qbeellä tehty exe joka tekee saman ku tuo muistiolla niin heti paljo isompi

Malfunc [16.09.2007 16:20:33]

#

Aika tehokkaasti toi Assembly pakkaa...

moptim [28.11.2007 18:49:40]

#

Assembly _ei_ pakkaa mitään. Assembly on vain tiivistä koodia, qb:n komennot sisältävät vaikka mitä kebabia.

ErroR++ [06.01.2012 19:49:28]

#

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

ErroR++ [28.01.2012 18:18:32]

#

Dosissa jos kirjotaa ton koodin edittiin, tallentaa sen ja kokeilee sitä niin se jumittuu.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta