Domanda sullo stack frame

di il
11 risposte

Domanda sullo stack frame

Ciao ,

Sto leggendo questo https://en.wikibooks.org/wiki/X86_Disassembly/Functions_and_Stack_Frames [Standard Entry Sequence]
Se ho capito bene spiega la differenza che intercorre tra valori passati in una funzione e valori locali presenti all'interno della funzione.
Vorrei fare qualche domanda .
Non so se avrete voglia di leggere , ma preferisco fare così che chiedere come funziona lo stack


Nel codice x86 che segue , se ho capito bene , EBP legge dallo stack l'indirizzo di base della memoria dedicata allo stack ( base address)

1) - Da cosa dipende il valore di base address ?Dipende forse dall'OS ?

Dopo EPB ( il pointer) punta anch'esso al valore di base address. Questo vuole dire che il pointer punta all'inizio dello stack.
Le prime due righe di codice servono quindi ad inizializzare lo stack.


caso Variabili Locali

section .text
global _start

_start:
    push ebp                    
    mov ebp,esp              
    sub esp, 12  ; space allocated on the stack for the local variables
    call _MyFunction
2) Perchè sottraendo un offset di 12 byte ( 3 DW) sono sicuro di allocare spazio . Cosa vuole dire allocare ?
Quando chiamo la funzione con variabili locali , la situazione dello stack è la seguente:
Ho un offset di 3 DW che equivale allo spazio massimo previsto per la variabili locali di quella funzione. Questo vuole dire allocare ?


caso passaggio di parametri copiandone il valore

section .text
global _start

_start:
    push ebp                    
    mov ebp,esp  
    push 2
    push 5
    push 10
    call _MyFunction2                
Inizializzazione stack come sopra , ma non alloco nulla.
Nel caso di chiamata di funzione il prossimo opcode e push. Se passo tre parametri avrò in sequenza tre push.
push decrementa l'indirizzo del pointer (ESP) dopo aver salvato il valore nello stack.

Perchè decremento?:
Dal punto di vista aritmetico si tende a raggiungere valori di indirizzo più basso quando occupo memoria nello stack. Lo stack cresce verso il basso,

11 Risposte

  • Re: Domanda sullo stack frame

    1) non ho capito il tuo dubbio

    2) allocare significa riservare spazio nell'area di memoria in cui operi on questo caso lo stack. E praticamente si fa riservando una serie di locazioni di memoria ai dati delle variabili.

    Se hai dubbi sul termine allocare forse è meglio tornare a libri ed argomenti precedenti a questi.
  • Re: Domanda sullo stack frame

    Ciao Oregon ,

    Nella 1) chiedevo solo per curiosità da cosa dipende l'indirizzo di base, ma giustamente come dici tu andrò a rileggermi la base.

    Nella 2)
    chiedo se quando riserviamo memoria per alcune variabili locali , lo facciamo agendo sullo stack .
    In questo caso quindi mi sposto sullo stack di tanto quanto ho necessità di allocare,quindi scrivo nello spazio dedicato quando sono nella funzione chiamata
    
    section .text
    global _start
    
    _start:
        push ebp                    
        mov ebp,esp              
        sub esp, 12  ; <-- mi sposto nello stack
        call _MyFunction 
    
  • Re: Domanda sullo stack frame

    Ansel ha scritto:


    Ciao Oregon ,

    Nella 1) chiedevo solo per curiosità da cosa dipende l'indirizzo di base, ma giustamente come dici tu andrò a rileggermi la base.
    Ma intendi il valore di ESP o di EBP ?
    Nella 2)
    chiedo se quando riserviamo memoria per alcune variabili locali , lo facciamo agendo sullo stack .

    In questo caso quindi mi sposto sullo stack di tanto quanto ho necessità di allocare,quindi scrivo nello spazio dedicato quando sono nella funzione chiamata
  • Re: Domanda sullo stack frame

    Ciao Oregon , intendo EBP.

    Guarda ho trovato un libro che si chiama Low Level programming di Igor Zhirkov. Seguo il libro.Non ho grosse pretese , ma la cosa mi diverte.
    Trovo il web troppo dispersivo e molte guide sull'assembly sembrano scopiazzate da libri o da altre persone. Avrei dovuto fare informatica , ma che devo di' è andata così !

    grazie
  • Re: Domanda sullo stack frame

    Ansel ha scritto:


    Ciao Oregon ,

    Nella 1) chiedevo solo per curiosità da cosa dipende l'indirizzo di base, ma giustamente come dici tu andrò a rileggermi la base.
    Aaarrghh... in realtà la domanda, banale ai tempi delle vecchie CPU in modalità reale, abbastanza semplice per quelle in modalità protetta con sistemi operativi 32 bit "vecchio stile", oggi diventa una domandona di quelle che richiedono uno spiegone titanico, perchè non è più come una volta

    La posizione dello stack è diventato, essenzialmente, impredicibile, sia come offset, che addirittura come segmento (rammento che i procesori x86 hanno memoria segmentata anche in modalità protetta, solo i segmenti... sono segmentoni...), al fine di rendere meno agevole l'injection di codice / dati in posizioni statiche.

    Davvero sarebbe un pippone spaziale, ma non credo ci siano tanti interessati a sapere come funziona, davvero, un sistema operativo moderno (cioè del 2018-2019), non uno degli anni '80, o magari 90, o 2000.
  • Re: Domanda sullo stack frame

    Ansel ha scritto:


    EBP legge dallo stack l'indirizzo di base della memoria dedicata allo stack ( base address)
    Non proprio. Il registro ebp punta all'indirizzo attuale dello stack, cioè esp. Sotto c'è di solito un megabyte di spazio libero, pronto per essere allocato per variabili locali.

    Se ti diverti con assembler, e se l'inglese non ti pesa, *******************
    Un sacco di esempi, e tanti esperti pronti a rispondere.
  • Re: Domanda sullo stack frame

    X jj2007: non è ammessa la pubblicità su questo forum.
    Ho asteriscato l'invito ad iscriversi al sito in questione.
    Ti invito a leggere il regolamento e a non farmi intervenire nuovamente, grazie.
  • Re: Domanda sullo stack frame

    Grazie
  • Re: Domanda sullo stack frame

    Toki ha scritto:


    X jj2007: non è ammessa la pubblicità su questo forum.
    Ho asteriscato l'invito ad iscriversi al sito in questione.
    Ti invito a leggere il regolamento e a non farmi intervenire nuovamente, grazie.
    Ovviamente hai ragione. Anche se quel sito non è commerciale, e non è mio. Volevo aiutare l'OP. Se lì mi capitasse un italiano con problemi di esprimersi in inglese, lo manderei tranquillamente qui.
  • Re: Domanda sullo stack frame

    Ciao jj2007 grazie mi dispiace per il cartellino giallo . Esiste un primo libro da consigliare per una persona che non è laureata ?
    Io ho trovato vari libri come dicevo sopra , ma forse è meglio ricevere prima un paio di consigli
    Grazie
  • Re: Domanda sullo stack frame

    Ansel ha scritto:


    Esiste un primo libro da consigliare per una persona che non è laureata ?
    Prova cercare il web con Assembly hello world examples mov eax Iczelion Help tutorials recommended reading (tutte le parole insieme)
Devi accedere o registrarti per scrivere nel forum
11 risposte