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!
Programeri su odgovorili na Hamletovo pitanje "Biti il ne biti?" :
0x2B | ~0x2B = 0xFF
(kao ono - ff - teško pitanje!)