Quali svantaggi ci sono in Dereferencing implicito di puntatori?

December 6

Quali svantaggi ci sono in Dereferencing implicito di puntatori?


Puntatori determinano il tipo di oggetto un programma software assume è in una posizione di memoria specifica. I puntatori possono essere convertiti in numeri interi specifici o riferimenti impliciti. I puntatori possono fare riferimento altri puntatori e array di dati. dereferenziazione implicita di puntatori introduce il rischio di errori di software e le vulnerabilità che non si verificano quando i puntatori sono esplicitamente definiti.

Esplicita Versus Puntatori impliciti

Quali svantaggi ci sono in Dereferencing implicito di puntatori?

La variabile sulla destra è implicitamente riferimento all'equazione sulla sinistra.

conversioni puntatore espliciti cambiare un tipo di puntatore ad un altro tipo di puntatore. Cambiare un intero o di byte per un puntatore è anche una conversione esplicita. C ++ consente la conversione implicita da un tipo di puntatore a void *. letterali Null possono avere una conversione implicita a qualsiasi tipo di puntatore. Variabili sul lato destro di un'istruzione di assegnazione sono implicitamente dereferenziati che prendono sul valore dei valori sul lato sinistro dell'istruzione di assegnazione. Tutto dereferencing è implicita in Java.

Operatori dereferencing

In C ++, i puntatori ai membri della classe devono essere dereferenced nel contesto di un oggetto classe. Un operatore. Dereferenzia un puntatore a un membro con un oggetto di classe. Una freccia seguito da un asterisco dereference un puntatore a un membro con un puntatore a un oggetto di classe. Utilizzando il "" operatore di rinvio nel linguaggio di programmazione C è chiamato dereferencing un puntatore. Un puntatore viene definita utilizzando l'espressione PTR = variabile o il valore. Un puntatore Dereferenced viene definita utilizzando l'espressione * ptr = variabile o il valore.

Errori

Dereferenziare un puntatore può portare a valori non validi se l'indirizzo è fatto riferimento dopo la fine della sua durata. Quando un puntatore viene dereferenziato, il programma chiama il valore a cui fa riferimento il puntatore. puntatori nulli hanno un valore di 0x0 default se statico e non inizializzato. Secondo "A Guide to Kernel Exploitation" di Enrico Perla, "Se un percorso kernel tenta di dereference un puntatore NULL, sarà semplicemente tentare di utilizzare il 0x0 indirizzo di memoria, che probabilmente si tradurrà in una condizione di panico, dal momento che nulla è mappata lì . "il puntatore deve essere definito utilizzando il comando * ptr prima che il puntatore Dereferenced può essere utilizzato altrove in un programma C.

Se il * ptr non è assegnato un valore prima di essere riferimento, il programma può bloccarsi. I puntatori a membri dati possono portare a un cattivo dereference. Se il puntatore non sta cercando valori da una matrice di oggetti di classe e non può determinare il valore della variabile, si verificherà un errore. "++ trucchi C" di Stephen C. Dewhurst afferma che "un puntatore a membro si riferisce ad un determinato membro di un oggetto non specificato". L'oggetto di riferimento deve essere fornita anche per il puntatore per funzionare correttamente.

vulnerabilità

dereferenziazione implicita di un puntatore non inizializzato crea una vulnerabilità nel codice del software. la corruzione della memoria corrompe un puntatore che diventa dereferenziato. Dereferenziare un puntatore non inizializzato fa sì che il software per fare riferimento a una posizione di memoria che non viene convalidato. Senza controllo della sorgente o destinazione del puntatore Dereferenced, gli hacker possono sfruttare questa vulnerabilità per passare un indirizzo kernel per il kernel del software e modificare la sua memoria con i propri valori desiderati in luogo dei dati degli utenti.