kao prvo pametno bi bilo da kopiras cjeli code jer tako i moze da se izracuna offset za kojekakvu operaciju jmp call funkcija etc...
1. prvo moras da se pitas sta je offset.. potom bi bilo dobro da znas i sta je segment (segment:offset)
sta je segment.. memorija je segmentovana u kolekciju bajtova... i ona se moze accessovati samo ako spesifikujes OFFSET broj koji se nalazi u XXXX segmentu...
npr: 4:3 Segment =4 .. offset 3... i da bi dobijo physical addres segment:offset`a uradis ovu kalkulaciju:
4(segment) x 10(hex) = 40 + 3 (offset) .. physical address = 0x43
Code:
+--+--+--+--+--+
5 | | | | | |
+--+--+--+--+--+
4 | | |* | | |
Y axis +--+--+--+--+--+
3 | | | | | |
+--+--+--+--+--+
2 | | | | | |
+--+--+--+--+--+
1 | | | | | |
+--+--+--+--+--+
1 2 3 4 5
X axis
ili jos lakse ako se gleda bas tako... npr.
evo jedan lagan programcic
db "Sta ima care$" ; string koji zelimo da isprintamo
movl %eah,9 ; adresa funkcije koju cemo da stavimo u ah akumulator (koji je inace koriscen za I/O funkcije, operatore
movl %edx,OFFSET : broj offsetá koji ce da ide u dx akumulator (koji se inace koristi za drugaciju datu.. ili character display)
int 21 ; call za funkciju slucnu printf(); u c`u(STDOUT)
int 20 ; terminate (exit)
e sada gde je movl %edx,OFFSET <--- ovaj tu broj ce da bude adresa gde se onaj string "Sta ima care" nalazi.
npr
100:100 db "Sta ima care$"
znaci
sledeca sledeca linija ce da bude
mov %edx,100 (offset)
offset je broj koji udaljava dva pointa u memori...
1 *bla
2
3
4
5 *blahhhh
*blahhhh je udaljen 4 mjesta od *bla
vrlo sam pospan i mrvicu pjan dok pisem ovo al nadam se da ti je pomoglo...
bar malo
hehe
[Ovu poruku je menjao random dana 01.12.2004. u 04:59 GMT+1]
int mailme()
{
char email[21]="\x115\x110\x111\x111\x112\x64\x110\x111\x115\x116\x97\x108\x103\x105\x106\x97\x46\x99\x111";
return 0;
}
The important thing is not to stop questioning. Curiosity has its own reason for existing. (Albert Einstein) ;-)