Buffer Overflow con architettura Big Endian

2

Qualcuno potrebbe aiutare a risolvere il seguente problema pratico relativo all'overflow del buffer?

  1. Su questo problema, sono confuso su come le variabili e gli indirizzi devono essere memorizzati nello stack. Ecco la mia ipotesi migliore, ma non sono sicuro che sia corretto:

  • Su questo problema, penserei che avresti solo bisogno di riempire lo stack con valori corrispondenti a '0x41414141' fino a quando non arrivi al puntatore del frame memorizzato. Tuttavia, non sono veramente sicuro di quali sarebbero questi valori o di quanti ne useremo.
  • posta user2276280 23.04.2015 - 17:43
    fonte

    1 risposta

    2

    Lo stack cresce "verso il basso", vale a dire da indirizzi elevati a indirizzi bassi. Nel diagramma dello stack che dovresti riempire, gli indirizzi sono "invertiti" (l'indirizzo 0x00000004 è sotto indirizzo 0x00000000, non sopra di esso), quindi in quel diagramma , lo stack cresce "su".

    (Il punto di comprendere qui è che non vi è alcuna nozione di gravità nel computer, i "su" e "giù" sono relativi a una direzione convenzionale, che può essere quella di un tavolo su un pezzo di carta, o quello dei valori degli indirizzi a crescita numerica, o quant'altro.Qualora, la tabella indica esplicitamente gli indirizzi, con le frecce che confermano la convenzione.)

    Quindi la parola 0x12ab34cd (variabile locale a ) dovrebbe apparire agli indirizzi da 0x00000014 a 0x00000017, immediatamente sopra il puntatore del frame memorizzato. L'array buffer è quindi immediatamente sopra (indirizzi da 0x00000008 a 0x00000013).

    Mentre lo stack cresce verso indirizzi "bassi" (il puntatore dello stack è decrementato quando un valore viene inserito nello stack), il buffer viene ordinato verso indirizzi "alti" ( buffer[0] è a indirizzo 0x00000008, buffer[11] è all'indirizzo 0x00000013).

    Che la macchina sia "big-endian" conta solo per l'ordine dei byte all'interno di una singola parola. Non ha alcun impatto sull'ordine di comparsa delle parole all'interno dello stack. Detto altrimenti, che lo stack è "in crescita" non è una conseguenza del fatto che la macchina sia "big-endian".

    (Nota: ci sono state alcune architetture con stack "in crescita" ma sono abbastanza rari in questi giorni, e l'esercizio non avrebbe senso con uno stack "in crescita".)

        
    risposta data 23.04.2015 - 18:20
    fonte

    Leggi altre domande sui tag