[ kime1 @ 28.07.2006. 00:40 ] @
kako izgleda objektni kod na mašinskom nivou, prvenstveno zaštita pristupa kako se realizuje ?!
[ toroman @ 28.07.2006. 07:02 ] @
Čudno pitanje :?

Mislim da bytecode ne provjerava nikakva prava pristupa, jer za to služi kompajler da provjeri ima li "rušenja" negdje. Ako se program kompajluje, znači sve je ok. Nije valjda da su iz Sun'a i ovo zakomplikovali :(
[ kime1 @ 28.07.2006. 12:37 ] @
ne mislim strogo na Javu, nego pošto je isključivo objektni jezik , pitao sam ovde :) ?

Neka bude za C++ ?
[ toroman @ 28.07.2006. 23:19 ] @
Ma uopšte se ništa ne provjerava na nivou mašinskog koda. Sigurno ne kod C++'a jer sve što treba provjeriti, provjerava kompajler. Tako da je moguće čak mijenjati i privatne podatke ;)

A i kod Java'e je predpostavljam ista situacija.

Inače, ako imaš klasu npr:
Code:

class Klasa {
public:
  void pub() {};
  int j;
private:
  void priv() {};
  int i;
}

i recimo da imas kod poslije
Code:

Klasa k;
k.i=2;

- program se neće kompajlovati. Provjera je na nivou kompajlera. Slijedeći kod se kompajlira:
Code:

Klasa k;
k.j=2;


E u šta se to pretvara? U 101 naravno, tačnije u asembler prvo. Kako bi izgledao kod ... recimo instanca Klase zauzima 8 bajtova u memoriji (ima dva integera). Varijabli j se dodjeljuje vrijednost komandom MOV adresaOdK+4, 2. To je neka vrsta adresiranja (piše u Art of Assembly Language sve fino a jasno) - mislim indeksirano. Sad, ako program ima bug (nešto pogriješiš, odluta ti neki pointer blablabla) moguće je veoma lako i da se izvrši komanda MOV adresaOdK+0, 2 odnosno da promijeniš vrijednost varijabli "i" koja je privatna ;) To se često i dešava kod pisanja iza niza primjera radi.

Ono - nema provjere ... Valjda, ili sam sve vrijeme živio u zabludi!