Cosa e come psp?, Programmazione basso livello. INFO |
Benvenuto Visitatore ( Log In | Registrati )
Cosa e come psp?, Programmazione basso livello. INFO |
Gruppo: Membri
Messaggi: 13 Iscritto il: Mon 12 October 2009 - 15:00 Da: Roma Utente Nr.: 89 Feedback: 0 (0%) |
Messaggio
#1
Monday 12 October 2009 - 16:04
Salute a tutti: Per inaugurare la sezione volevo dare qualche info riguardo la programmazione a basso livello per la console di casa sony, solo a scopo di studio. Il Processore principale Allegrex è basato sull'Architettura MIPS R4000 a 32-bit con frequenza variabile da 1 a 333 MHz di default: "222 MHz" Coprocessore matematico Media Engine CXD5026-203GG con frequenza variabile da 1 a 333 MHz di default: 222 MHz Processore grafico Sony CXD2962GG da 166 MHz Memoria DRAM da 2 MB Embedded (integrata) Rendering di picco pari a 33 Milioni di poligoni/secondo a 60 fps ed effetti grafici avanzati di Bump Mapping, blur e luci dinamiche. Glossario: Macchina 64bit per istruzione: Word: 64bit /Per macchine da 32bit Double Word Half word:32bit /è una word per macchine da 32bit ,double word per macchine da 16bit Set.ISTRUZIONI.R2000 PDF.GUIDA.MIPS Simulatore Architettura MIPS per windows,linux Architettura Mimps Bump Mapping Cosa sono gli exploit: Cosa avviene durante il caricamento/esecuzione di un programma?..... Caricamento di un programma: caricamento in memoria, e dalla memoria al -->sistema di transcodificazione -> elaborazione CPU/cache+componenti internal bus controlled",in aggiunta possiamo parlare di caricamento dati da buffer. Quando si parla di buffer di memoria è come se si parlasse di una credenza dove si ripone momentaneamente un dato per poi utilizzarlo successivamente. Di solito vengono posti in ram questi dati per poi venire manipolati... come per esempio il sistema I\O di una tastiera.. si preme un tasto questo viene registrato questo input e inserito nel sistema(detto in termini molto astratti) fino a quando una qualsiasi operazione viene eseguita su di esso o grazie ad esso. Come si sfrutta per realizzare un exploit? Tutto ciò Ovvero si prende un particolare momento in cui viene caricato/a una serie di istruzioni/e e ci si intromette realizzando un inject(esecuzione set istruzioni forzate e una recall per richiamare il programma principale) durante il loading del programma. Ovvero durante un qualsiasi caricamento in una struttura top->down è possibile salvo numerose problematiche introdurre codice non autorizzato nell'esecuzione di un codice già autorizzato dalla macchina stessa. Ingredienti: #1.conoscenza di base del linguaggio matematico #2. conoscenza programmazione strutturata C #3.Voglia e immaginazione come disse Einstein l'immaginazione è più importante della conoscenza. //Prima stesura Tuttò ciò sintetizzato al massimo darà luogo a ben più amplie spiegazioni più avanti partendo da una rapida visione dalla simbologia,alla strutturazione dei primi programmi, per C, MIPS per poi procedere alla realizzazione di vere e proprie applicazioni per PSP o ogni genere di cosa partorisca, da questi tutorial, la vostra mente. Verranno anche spiegate alcune librerie già scritte ad hoc per la psp (e già perchè le librerie attraverso funzioni elementari eseguono funzioni ben più complesse che cmq sia finisco a livello basso ovvero in istruzioni Assembly poi in macchina---> per processori Mips ) Esempio: programmazione strutturata--> traduzione in, codice assembly ,traduzione in--> stringhe binario (linguaggio macchina) di significato logico per l'unita di esecuzione. Ex32bit : 0000 0000 0000 0000 0000 0000 0000 0000 32 bit attivabili in funzione di funzioni definite come maskere da applicare alla stringa binaria--> caricata dalla memoria per finire come comando riconosciuto dalla CPU (attraverso transcodifiche varie). Esempio generico: decido che i primi 8bit da destra rappresentato un numero decimale : dunque 2^8=256 combinazioni posssibili ovvero 256-1(si parte con esplosioni di potenze da 0 con significato posizionale da sinistra a destra dunque avendo 256 combinazioni possibili possiamo rappresentare compreso lo 0 255 numeri (256-1)) numeri rappresentabili i successivi 8bit idem , e gli altri combinati appositamente faranno compiere operazioni aritmetiche sui numeri presenti negli ultimi 16bit della stringa. 1 set di bit scostato di 24bit da sinistra ---> rappresentazione del numero 18 0000 0000 0000 0000 0000 0000 0001 0010 = [(2^1=2 + 2^4)=(2+16)]=18 1 set di bit scostato di 16bit da sinistra ---> rappresentazione del numero 17 0000 0000 0000 0000 0001 0001 0001 0010 = [(2^0=1+2^4=16)=(1+16)]=17 Per eseguire una somma come facciamo a comunicare al processore che vogliamo addizionare 17 a 18? Esistono delle maskere predefinite (set di istruzioni) che determinano quali byte(mean: 4bit) servono della stringa di bit se attivati ad eseguire OPERAZIONI. Creiamo noi una maskera di esempio (ASTRATTA): quante sono le operazioni di base? 4. Giusto? Quindi ci servono 2^2 combinazioni per rappresentare 4 operazioni quindi solo 2bit prendiamo dunque i primi due bit della stringa e li impostiamo come quanto segue: ADDIZIONE:00 SOTTRAZIONE:01 MOLTIPLICAZIONE:10 DIVISIONE:11 PERFETTO i primi 2 bit sono riservati per le operazioni aritmetiche! dunque che ci serve? Dati iniziali li abbiamo... quale operazione eseguirci la abbiamo... rimane sapere dove mettere il risultato ci serve un indirizzo di memoria...!!! E deve essere questo spazio abbastanza grande da poter ricevere la somma di due numeri composti da massimo 255 elementi l'uno. ovvero 512 ovvero 2^9=512 - 1 511...bastano per rappresentare 510 numeri XD quindi in una macchina che può al max rappresentare 2^8 combinazioni la somma di due numeri il cui risultato fosse più grande di 255 genererebbe un errore di overflow ma di questo ne parleremo più avanti. Poniamo caso che la memoria sia bella libera e 2^9 bit liberi ci siano dunque: 0x= stringa esadecimale []= gruppi di 4 bit = 1 byte {}=gruppi da 8bit= 2byte MASK:[2bit per le operazioni,2bit liberi],[4 bit liberi],{DESTINAZIONE RISULTATO},{dato x},{dato y} DATO FINALE da mandare all'unita che capirà l'istruzione in linguaggio macchina:[0000],[0000],[0x12E in esadecimale (posizione 302 in decimale)],{0001 0001},{0001 0010} Tutto ciò somma due numeri interi impressionante vero? Vi sorgono dubbi in epoca quanto fosse scomodo e che innovazione fù dunque l'assembly che con : ADD a, x ,y equivaleva ad a=x+y E' tardi scusate! Domani revisiono il tutorial se ho scritto qualche castroneria ! [IN AGGIORNAMENTO] Messaggio modificato da Denial il Monday 12 October 2009 - 22:13 |
Versione Lo-Fi | Oggi è il: Fri 1 November 2024- 00:47 |