Am jucat un pic cu Google Native Client - este un plugin pentru browser (sprijinit de Firefox, "Opera", "Safari" și "Chrome" și platforma Windows, Mac și Linux pe x86, x86-64 și ARM).
Acest plugin, care poate executa codul binar (!) Compilat în browser. Într-un fel, este ca și ActiveX. Scrieți un cod binar, compilați-l într-o versiune specială a gcc și apoi pur și simplu încorporați eticheta EMBED în browser.
Mă interesează modul în care se menține siguranța aici. Codul Lot este interzisă (de fapt, totul este permis - este utilizarea eficientă a timpului CPU, pentru restul trebuie să meargă la browser-ul prin intermediul NPAPI sau SRPC (RPC simplă)), dar dezvoltatorii o mulțime de a vorbi, care a permis de asamblare în linie.
Sicriul, după cum se dovedește, se deschide simplu și destul de spiritual. În primul rând, dezvoltatorului i se interzice utilizarea unor construcții, de exemplu INT (apel de întrerupere) și altele. În al doilea rând, comenzile de tranziție sunt modificate și acest lucru este cel mai interesant.
Nu știu cum există în procesoare ARM și comenzi x86 pot avea lungimi diferite, orice «PUSH AX» ocupă octet, «MOV AL, 41" - două,« MOV AX, [BP + 8]“- trei și așa pe. Dacă face o tranziție nu este primul octet al echipei (ca, de exemplu, al doilea octet de comandă «MOV AL, 41„), se pare că secvența rămasă (eventual cu octeți care merg mai departe), de asemenea, înseamnă ceva (în cazul «MOV AL, 41 de octeți secunde va fi "41", aceasta este comanda "INC CX").
Acest lucru face posibilă mascarea oricărei comenzi interzise în interiorul comenzii și executarea acesteia, făcând trecerea nu la primul octet. Cum ne protejează Google Native Client de acest lucru? Este foarte simplu.
Al doilea pericol este codul din date, deoarece aproape orice secvență de octeți este un fel de cod de mașină, astfel încât să puteți ascunde cu ușurință codul în interiorul textului și apoi să treceți la acest text. Este clar că având capacitatea de a limita tranzițiile, această problemă este ușor de rezolvat - răspândim codul și datele în diferite registre de segmente și nu dăm codul să treacă la date. Nu este nimic complicat, primul caz a fost mai interesant.
Interesant este că codul care controlează securitatea și implementează SRPC sa dovedit a fi foarte mic, în videoclipul de pe YouTube, dezvoltatorul spune ceva despre 6000 de linii, apoi despre 6000 de octeți. În orice caz, ambele sunt un pic. Acolo (în videoclip) a arătat interpretul Ruby care lucrează în browser. Este interesant, dar nu mai interesant, că codul din C (sau C ++, nu contează) a trebuit schimbat foarte puțin pentru ao recompila în Codul Nativ Google.
Cred că acesta este un proiect interesant.
Acesta nu este un standard, ci un proiect. Din câte știu, eticheta de încorporare nu a fost inclusă în standardul HTML. Este doar un alt non-skype / mozill proprietate
VIDEO nu este, de asemenea, un standard, totuși, în toate browserele moderne există. Ei bine, nu e de mirare că există jamburi îndepărtate și apropiate. Cache-ul procesorului, de asemenea, cred că nu va aproba spălarea volumelor de cod aproape cu un ordin de mărime.
Indiferent ce a fost, nu este nimic de argumentat, dezvoltatorii au anunțat deja numerele. Păi, uite. aproape toate codul C # este utilizabil în Silverlight. Și ce fracțiune din codul C funcționează prin NPAPI sau SRPC? Mi se pare că vor mai fi multe lucruri de rescris pe această nouă platformă
Acesta este punctul, că schimbările sunt minime. Acest lucru este confirmat, de exemplu, de Quake for Native Client. Mi-ar mai spune zvonuri. Din nou, este ciudat că acest zvon despre Microsoft este singurul eveniment în care se menționează IA-128.
Ei bine, nu-mi pasă. În orice caz, tranziția la 128 biți se va întâmpla, cu astfel de rate de dezvoltare, în următorii 5-7 ani.