Hollosi Information eXchange /HIX/
HIX CODER 122
Copyright (C) HIX
1998-06-01
Új cikk beküldése (a cikk tartalma az író felelőssége)
Megrendelés Lemondás
1 Re: C++ es egymasbaagyazott fuggvenyek (mind)  11 sor     (cikkei)
2 Re: C++ es egymasbaagyazott fuggvenyek? (mind)  23 sor     (cikkei)
3 Re: Gepi kod (mind)  155 sor     (cikkei)
4 Javarol (mind)  9 sor     (cikkei)

+ - Re: C++ es egymasbaagyazott fuggvenyek (mind) VÁLASZ  Feladó: (cikkei)

Hali!

>Most allok at Delphi-rol C++-ra, es sehogy nem tudom
>megoldani, hogy a C++ Builder elfogadja az
>egymasbaagyazott fuggvenyeket, pl:


A dolog azert nem megy mert nem mehet... C-ben nem a'gyazhatsz egymasba
fuggvenyeket. Hat ennyi...

Compi
+ - Re: C++ es egymasbaagyazott fuggvenyek? (mind) VÁLASZ  Feladó: (cikkei)

On 30 May 98 at 17:48,  > wrote:

> Most allok at Delphi-rol C++-ra, es sehogy nem tudom
> megoldani, hogy a C++ Builder elfogadja az
> egymasbaagyazott fuggvenyeket, pl:

Az ANSI C illetve a C++ nem ismeri az egymasba agyazott fuggveny
fogalmat. Altalaban (pontosabban mindig) ki lehet valahogy kerulni a
dolgot (illetve aki nem Pascal-on nevelkedett, annak eszebe se jut
egymasba agyazni fuggvenyeket), ugyhogy ez nem okoz problemat. (Nem
akarom azert egy szoval se lebecsulni, jo dolog az.)

Ismerek viszont egy C forditot (lehet, hogy van mas is), amiben van
ilyen nyelvi bovites: Ez a GNU fele gcc (amirol meg annyit is
erdemes megjegyezni, hogy Free Software (Szabad Szoftver) -- illetve
mostansag terjedo szohasznalattal OpenSource Software -- tehat a
forrasa is hozzaferheto mindenki szamara ingyenesen.)

Mondjuk ez Teged nem segit, hacsak nem akarsz atterni a gcc-re.

Istvßn
--  Istvan Marosi  --  http://www.sch.bme.hu/~marosi  --
--  Recosoft Ltd.  --  mailto:  --
+ - Re: Gepi kod (mind) VÁLASZ  Feladó: (cikkei)

On 29 May 98 at 8:55,  wrote:

> > C:\>copy con prg.com
> > 5b$-!#PZ4AP[4\(GM(GR(gA(gB(gC(gDs$
> > (C) Marosi Istvan 1998 V. 24.T{jb$P5))5)!)!5)E)!
> 
>   Aruld mar el, Istvan, mit csinal ez a joszag. Nem mertem elinditani a
> 386-osomon -- ahogy kidisassemblaltam, olyan halom zagyvasagot lattam, hogy
> szerintem pentiumul van.

Nincs abban zavarossag, csak elso latasra :) Es persze 386-oson is 
menni kell. (A Pentiumoknak alig van tobb utasitasa, mint a 386-osnak, 
koznapi hasznalatban meg azok sem igen erdekesek, cache kezelesre, 
meg szemaforok krealasara valoak.)

A zagyvasagot bizonyara a kozepen elhelyezett copyright szoveg 
visszafejtesekor lattad, de az a terulet nem fut. Ennek ellenere van 
funkcioja, mindjart leirom, hogy mi.

Volt egy masik level is:

On 29 May 98 at 8:10,  wrote:

> Oke, rendben. Most meggyonom buneimet, a program tenyleg tokeletesen
> mukodik.

Huhhh, megnyugodtam :))

> Az az igazsag, hogy eloszor csak debug-gal neztem meg, aztan a sok
> xor-ban nem sok erdekesseget lattam. Viszont ebbol tenyleg egy
> "Szia" sul ki a vegere. Igazan rafinalt es elismeresre melto.

Koszi :)
Es meg is fejtetted, hogy hogyan jon abbol ki a "Szia"? (Nem 
bonyolult, de mindjart le is irom)

> Azert valljuk be igy magunk kozott: ugy nem gepi kodban irtad? :)

De igen. Mi masban lehetne? :)) Egy utasitaslistabol keresgeltem,
hogy milyen utasitasok azok, amik ertelmesen hasznalhatoak az adott
feladatra, es ami a legfontosabb: 0x20 es 0x7e kozott van a kodjuk!
Aztan ezt beirtam egy szovegfile-ba, ahol ... no egyszerubb, ha 
idemasolom az en szia.com nevu szovegfile-omat: (A 8< egy ollo akar 
lenni :))

-------------8<----------------
5b$-!#PZ4AP[4\(GM(GR(gA(gB(gC(gDs$
(C) Marosi Istvan 1998 V. 24.T{jb$P5))5)!)!5)E)!

100  5b$  xor ax,2462
103  -!#  sub ax,2321           ; ax=0141
106  P    push ax
107  Z    pop dx        ; dx=0141
108  4A   xor al,41             ; ax=0100
10a  P    push ax
10b  [    pop bx        ; bx=0100
10c  4\   xor al,5c             ; ah=1  al=5c
10e  (GM  sub [bx+4d],al        ; ) -> int
111  (GR  sub [bx+52],al
114  (gA  sub [bx+41],ah        ; T -> S
117  (gB  sub [bx+42],ah
11a  (gC  sub [bx+43],ah
11d  (gD  sub [bx+44],ah
120  s$   jae 146
122 ... CrLf
        (C) Marosi Istvan 1998 V. 24.
141  T{jb$ Szia$
146  P    push ax
147  5))  xor ax,29xx           ; ah=28
14a  5)!  xor ax,21xx           ; ah=09
14d  )!   int 21                        ; cd+5c=29 ')'
14f  5)E  xor ax,45xx           ; ah=09 -> 4c
152  )!   int 21                        ; cd+5c=29 ')'
------------->8----------------

A masodik sor utolso felkialtojele utani resz persze mar nem fut,
ugyhogy az ott levo dolog a program szempontjabol komment. (Ja, ha
ilyesmire gondoltal, hogy nem gepi kodban irtam, akkor felig igazad
van :) A bal oldali oszlopba irtam, hogy az utasitas milyen cimre
kerul majd a memoriaban, a kovetkezo oszlopba kezzel beleforditottam
a gepi kodjat, ami mindig egy ascii karakterkod is, aztan meg a
szimbolikus asm mnemonikokat, hogy ne zavarodjak nagyon bele :))

Nehany megjegyzes:

- A kepernyore irni a dos-ban pl. 'int 21h' utasitassal lehet. A
kiirashoz a dx-be kell a string kezdocimet tenni, ez egy hexa
100-nal kicsit nagyobb szam lesz (141h). Az int21 kodja 0cdh 21h. A
21h az rendben, ez a '!' kodja. A cd viszont nagyon sok, azzal
valamit kell buheralni, ugyhogy onmodosito kodot kell irni.

- Vagyis a hexa 100-as cim utan nem sokkal a memoriaban byte-okat
kell modositani, erre a 'sub [bx+byteoffset],reg' utasitast talaltam,
mint olyat, aminek a kodja billentyuzheto [ '(G' illetve '(g' ].
Ehhez hexa 100-at kell bevarazsolni a bx regiszterbe, az offset igy
mar hexa 20-nal nagyobb lesz, van ra billentyu.

- A mov kodja nem olyannak felel meg ascii-ban, amit billentyuvel
lehet irni, viszont kihasznalhato, hogy indulaskor nullak vannak a
regiszterekben, igy egy xor ugyanaz, mint a mov. Az 'xor ax,konstans'
kodja viszont szep: '5' es mogotte a konstans erteke ket byte-ban,
ugyhogy ha a konstans nagyobb hexa 2020-nal, akkor ok. A 'sub
ax,konstans' is szerencses utasitas, igy mar konnyu ket nagy szambol
kicsit csinalni.

- Mindezekkel az ax-ban lesz a kivant szam, azt megint csak mov-val
nem jo atrakni mas regiszterbe a mov kodja miatt, erre a push-pop
parosat hasznaltam, azoknak is 'szep' kodjuk van.

- Az int21 0xcd-jet ugy csinaltam, hogy hexa 29-bol levontam 5c-t.
Azert pont 29-et valasztottam, mert annak ')' a kodja, igy a
nyito-csuko zarojelek szama azonos lesz :) Ehhez meg azt kellett
tennem, hogy azoknal az utasitasoknal, ahol az ax regiszternek a
tetejet (ah) alakitottam megfelelo ertekre a 16 bites xor
utasitassal, ott az al regiszterben tok mindegy, mi alalkul ki, igy
ezekbe az xx-ekkel jelolt byte-okba is tehettem ')'-et, hogy parban 
legyen az osszes :))

- Ha mar modositom a kodot, modositottam a stringet is, ne latszodjon
kapasbol, hogy "Szia" van benne. A legegyszerubbet tettem, 1-gyel
novelt kodok szerepelnek a programban, amikbol aztan 1-et levonok. A
kozbulso copyright szoveg hosszaval meg egy felesleges 'push ax'
utasitassal (146-os cim) meg azt is beallitottam, hogy olyan cimre
keruljenek a modositott byte-ok, amikbol (a '(G' illetve '(g' utani
betukbol) a MR ABCD szoveg jon ki :)

- MOST JON A LEGFONTOSABB: Az onmodosito kod gondot okoz! Ugyanis a
processzor prefetch queue-jaba (durvan: eloreolvaso puffer) mar
korabban bekerulhetnek a byte-ok, mint hogy modositana oket a
program!!! Ez a processzortol magatol fugg, hogy hogyan csinalja az
utasitasok eloreolvasasat (prefetch-et). Ezert kellett kozepre tenni
egy hosszu valamit (a copyright szoveget), hogy kilogjon a prefetch
queue-bol a modositott resz (az int utasitasok kodja). Raadaskent
meg egy ugro utasitast is betettem (amivel atugrom a copyright
stringet), mert a legtobb processzor ilyenkor ujratolti a prefetch
queue-t.

Ez volt a legcikisebb resz, mert nem tudom (nem neztem utana), hogy
az ujabb processzorok mennyire okosan kezelik a prefetch-et, meg
milyen hosszu a queue-juk. Ezert kerdeztem, hogy fut-e modern 
procikon.

Ja, a stringbe sorveget is tettem (ket byte-os CRLF kod), hogy a HIX 
ne torje a hosszu szoveget ket sorba valahol akarhol :)) Es 
remenykedtem, hogy mindenki, aki kiprobalja, olyan shell-et hasznal, 
ami CRLF-fel jelzi a sorveget, es nem egyetlen LF-fel, mint unix-okon 
szokas. Bar nem is tudom, lehet, hogy a DOS-hoz forditott GNU-s BASH 
shell is CRLF-et ad, nem csak LF-et, hiaba unix-os program 
eredetileg.

No, jo hosszu lettem ma is, bocs attol, aki unta :))

Istvßn
--  Istvan Marosi  --  http://www.sch.bme.hu/~marosi  --
--  Recosoft Ltd.  --  mailto:  --
+ - Javarol (mind) VÁLASZ  Feladó: (cikkei)

http://java.sch.bme.hu
http://ural2.hszk.bme.hu/~werner/

sziasztok:
Peter 

> --------------------------------------------------------------------
              "Veszek majd egy Pentium szamitogepet,
           mert azon mar lesz Internet." (Vagasi Ferenc)

AGYKONTROLL ALLAT AUTO AZSIA BUDAPEST CODER DOSZ FELVIDEK FILM FILOZOFIA FORUM GURU HANG HIPHOP HIRDETES HIRMONDO HIXDVD HUDOM HUNGARY JATEK KEP KONYHA KONYV KORNYESZ KUKKER KULTURA LINUX MAGELLAN MAHAL MOBIL MOKA MOZAIK NARANCS NARANCS1 NY NYELV OTTHON OTTHONKA PARA RANDI REJTVENY SCM SPORT SZABAD SZALON TANC TIPP TUDOMANY UK UTAZAS UTLEVEL VITA WEBMESTER WINDOWS