Che cosa significa EIP?

15

Ci sono tonnellate di domande qui che fanno riferimento a eip :

Che cos'è l'EIP? Come viene utilizzato, sia come target di exploit che in codice benigno?

    
posta Ares 07.07.2016 - 21:48
fonte

2 risposte

15

EIP è un registro in architetture x86 (32 bit). Contiene il "Puntatore di istruzioni esteso" per lo stack. In altre parole, dice al computer dove andare avanti per eseguire il comando successivo e controlla il flusso di un programma.

Linguaggio dell'Assemblea di ricerca per comprendere meglio come funzionano i registri. Skull Security ha un buon primer.

    
risposta data 07.07.2016 - 21:59
fonte
10

Una delle cose basilari di cui un computer ha bisogno di tenere traccia è dove sono memorizzate le istruzioni che vengono eseguite.

Questo è normalmente fatto dalla CPU usando quello che è spesso noto come pointer di istruzione o counter del programma register . Il nome esatto dipende dall'architettura, ma il concetto si generalizza su tutte le architetture. Si chiama puntatore dell'istruzione sulle CPU Intel, e questo è il termine che userò in questa risposta. Il puntatore dell'istruzione viene continuamente incrementato mentre le istruzioni vengono eseguite dalla memoria e anche aggiornato ogni volta che viene eseguita un'istruzione di salto di qualche tipo. Le moderne architetture CPU con più pipeline di esecuzione parallela e core multipli rendono più complesso ciò che accade all'interno della CPU, ma a un osservatore esterno, la semplice spiegazione è sufficiente per capire cosa sta succedendo e lo scopo dei registri pertinenti. p>

In virtù dei vecchi processori Intel 8086/8088, 80186 e 80286 a 16 bit, il puntatore dell'istruzione veniva normalmente espresso come coppia di valori a 16 bit noti come segmento di codice (selettore > nell'80286, ma ad eccezione dei selettori di modalità protetta funzionano in modo molto simile ai segmenti) e il puntatore di istruzioni. In assembler parlace, CS:IP dove i due punti indicano l'accoppiamento di un segmento e un offset come coppia per formare un indirizzo di memoria. CS e IP qui sono Registri CPU , piccole posizioni di memoria all'interno del chip della CPU stesso, in questo caso particolare ogni 16 bit di dimensione. (Avevi anche cose come DS:DX che era convenzionalmente il luogo in cui leggere o scrivere dati in memoria, DS era segmento di dati e DX è un registro generale che in questo caso conteneva i dati offset di segmento: c'erano originariamente quattro registri destinati ad uso generale, denominati rispettivamente AX, BX, CX e DX, ognuno dei quali poteva essere indirizzato in termini di metà alta - AH, per esempio - o di metà inferiore - - AL, più un piccolo numero di registri generici con usi specifici previsti: le CPU moderne hanno molti, molti più registri, con dozzine di registri in comune e oltre cento non inauditi.)

Nel rendere la CPU 80386 alla fine degli anni '80, Intel apportò molte modifiche, inclusa l'estensione dello spazio degli indirizzi a 32 bit pur mantenendo i selettori come concetto . Per questo motivo, i vecchi valori a 16 bit non erano più sufficienti e il puntatore dell'istruzione è stato esteso a 32 bit. Per mantenere la piena compatibilità con le versioni precedenti (a questo punto, Intel aveva probabilmente imparato la lezione dell'80286 che era più compatibile unidirezionale, ma era facile passare dalla modalità reale di 8086/8088 La modalità protetta di 80286, ma tornare indietro era molto più difficile, e in pratica si trattava di un problema), questo richiedeva un nuovo registro per la CPU per mantenere il puntatore di istruzioni quando si opera in 32- modalità bit.

Nell'80386, i registri estesi (32 bit) erano denominati Exx mentre i corrispondenti registri a 16 bit erano indicati in precedenza come xx. Così si otterrebbe ad esempio il vecchio registro dell'accumulatore a 16 bit AX più il registro di accumulo esteso a 32 bit EAX (con metà a 16 bit EAH e EAL). In linea con questa convenzione di denominazione, il registro Indicatore di istruzioni estese è stato indicato come EIP.

Per inciso, il più delle volte, il valore corretto non è semplicemente EIP, ma CS: EIP, perché il valore di EIP rimane un offset da qualche posizione iniziale che è definita dal selettore di codice .

    
risposta data 08.07.2016 - 10:46
fonte

Leggi altre domande sui tag