ir kokia to prasme, aparto to kad paciam sunkiau paskui susigaudyti? nemaciau nei vieno disasemblerio, kuris parasytu asm koda, kaip jis buvo pradiniam variante. Nepagalvojai, kad protingas kompiliatorius tokias nesamones, kurios nenaudojamos, gali ir is vis ismesti, arba paoptimiztuoti? Jei jau zaisti tai su besimodifikuojanciu kodu, o ne su push/pop kurie tik rasant koda svarbus. On 12/14/2010 04:16 PM, Jornada Del Muerto wrote: > Dar ZX laikais specialiai veldavom koda visa, kad neitu is viso pradebugyt ar suprast, pvz.: > > 1. Pasirasai tokia spausdinimo funkcija kuri ESI registre gautu teksto pointeri ka spausdint, daleiskim terminatorius $, o ji poto jumpina i sekanti uz terminatoriaus adresa, tipo: > > mov edi, offset label1 > jmp print > label1 db "text1$" > mov edi, offset label2 > jmp print > label2 db "text2$" > > dekompiliuojant viskas susivels i asm instrukcijas. > > 2. Arba apsauga nuo dunduku budavo, pvz programa turi kazka isspausdint ir iskviest kazkokias kelias proceduras, daleiskim tai com - ta prasme i OS sugryztama su ret; > > push offset label1 > push offset print > push param1 > push param2 > push offset routine1 > push offset routine2 > ret > ... o cia beleko prikist galima kad painiau butu... taip pat tarpe pushu galima kokia nors netikra logika ideti tiesiog demesi nukreipt nuo esmes... > label1 db "belenkas$" > routine1: > pop eax > pop ebx > .. do something .. > ret > routine2: > ..do something... > ret > print: > pop esi > .. print text as esi... > ret > > 3. Masininio kodo lauzymas > > Atmitinai nepamenu jau x86 mnemonikos bet, visada galima budavo isdurt nesamoningu baitu prikaisiojant i programa > > vyksta kazkokia pseudo logika: > > mox eax, #9c9c4040 > dec eax > and bx, 0 > pop edi > mox esi, edi > dec edi > push edi > mox ebx, offset label2 > mox ecx, ebx > inc ebx > push ecx > push ebx > ret > label1 db kazkokie klaidinantys baitai > label2 db klaidinantis prefixas per kuri asmo komanda dekompiliojant virsta visai kita, 1 ar keli baitai, atitinkamai tiek kartu inc ebx aisku tai gali buti ir kokia nors buline daugyba ar sudetis jei ju daug > label3: > normalus kodas > > mnemonikos dabr nepamenu tai siaip is galvos parasysiu, norint galima pagal mnemonika susirast realias komandas, pvz. masininis kodas but: > label2: > 21 > label3: > 56 41 > > taciau su 21 daleiskim gaunasi visai kita instrukcija, pvz valdancioji ret, call, jmp ir t.t.. ta prasme keicianti ECS o su label2 dekompiliuosis i kita instrukcija, zaidimas prideliojas i steka tikru ne tikru adresu trukdys atrinkt galus,galu gale galima ir teksta paleist labai norint jei is jo gausis jmp, dekompiliatorius is viso gali nesusigaudyt kas darosi, taip kaip ir su debugeriu koks studentas ;) > > > va tokius dalykus darydavau 16 metu ;) tik ant z80 ;) >