[ Vojislav Milunovic @ 05.02.2005. 22:23 ] @
Ok ajde da prtpostavimo da sam sve prefixe pregledao, ali me ubija kako da provalim da li je insturkcija 1-2 bajta, ajde recimo da sam uzeo push pop i mov.
to mu dodje
mov eax, ecx
10001011 11reg/reg

push reg/pop reg
push ->> 01010reg
popb ->> 01011reg

Ajde prvo kad sam pogledao ove instrukcije reko sebi, aha, ako je setovan prvi bit onda je 2byte instr ako nije onda je 1byte (mov/push/pop) e tu mi ulece koska sledece sadrzine:
xchg eax, reg
10010reg
i to sam se slogirao, e sad mene zanima kako ja da znam da li je u pitanju opcode od 1 byte ili je pak rec o opcode od 2 byte, nemam, pojma kako to da izvedem, evo citam intell dokumentaciju ali nista pametno ne nadjoh =( (mozda i ima nesto pametno ali ja ne vidim)

Poz...

[ Sundance @ 05.02.2005. 22:35 ] @
Ukoliko je jedan od operanada za xchg eax registar, duljina je jedan bajt, inače dva. eax je malo poseban jer se često koristi i zato su neki opkodi optimizirani.

Pogledaj z0mbiev LDE (Length Disassembler Engine), mali je ali pali :>
[ Vojislav Milunovic @ 05.02.2005. 22:45 ] @
Ma znam zato sam i postovao da me zbunjuje to oko duzine =)
jer sam se prvo istripovao da ako je setovan 10000000 onda je 2 byte ali me je u pojam ubio xchg eax/reg jer je ona 1byte ali ima setovan bit 10000000 =) Tako da mi je ta zamisao da trazim po bitovima otpala =(

A uzgred di si se ti sakrio? Nema te na ICQ =)))
[ Sundance @ 05.02.2005. 22:50 ] @
Pa onda provjeri odvojeno da li se radi o xchg eax, <reg> kao specijalan slučaj :)

ICQ...eh...ima tamo puno napasti....veća mi je tlaka izvjesnim inidividuumima reći da sjašu, pa ga zato najradije i ne palim :>
[ Vojislav Milunovic @ 05.02.2005. 23:27 ] @
Uzmi bre jabber bratac =)
[ BaCkSpAcE @ 06.02.2005. 02:15 ] @
Pogledaj ono sto sam pisao u topicu Instrukcioni kod. Registar naredbi i dekoder?
Naziv topika nema mnogo veze sa onim sto je autor teme ustvari hteo, ali bitno je da je to ono sto ustvari tebi treba: http://www.elitesecurity.org/tema/92300

1-bajtni format: opcode [registar]
jedan bajt je kada se operand podrazumeva, ili kad je neki registar u pitanju...
npr: pop eax; push ebx; inc eax; dec eax...
2-bajtni format: opcode (mod reg r/m)
dva bajta je kad je neka instrukcija tipa registar/memorija u/iz registra bez pomeraja...
npr: mov eax, ebx; add ecx, edx; mov ebx, [eax]...
3-bajtni format: opcode (neposredni operand)
tri bajta je kad ides neposredni operand u/iz registra...
npr: add esp, -10...

Ima i meni tu jos nekih nejasnih stvari, ali ovo je pravi put :)
[ Vojislav Milunovic @ 06.02.2005. 03:09 ] @
Ma kapiram ja to =)
Nego jer ima neka forica da ja unapred znam koja je instrukcija ima modR/m ili moram sve pojedinačno da ih testiram po opkodu? Gledam ovog z0mbia dečko nije normalan šta je sve napisao =)))