Originariamente inviato da AR64S-H
Qualkuno mi sa dire come si fa a capire in quale luogo del record di attivazione vanno le variabili. Ecco un esempio di record di attivazione di un esercizio:

# R | ... |
# E +- +---------------+
# C | | EBP vecchio | <-- %EBP (link dinamico)
# O | +---------------+
# R | | ind.ritorno | <-- +4(%EBP) (link statico)
# D | +---------------+
# | | ind.matr | <-- +8(%EBP) (I argomento)
# A | +---------------+
# T | | dim | <-- +12(%EBP) (II argomento)
# T +- +---------------+
# | ... |
#

perkč dim va al 12(%ebp) e magari una variabile lim va a -4(%ebp) e perkč ind. ritorno va a 4(%ebp) e ind.matr a 8(%ebp) piuttosto ke il contrario. Non riesco a capire questo il resto l'ho capito questo no
Supponendo di lavorare a 32 bit, con una procedura che usa la convenzione di passaggio "cdecl", si ha la seguente situazione:

Il chiamante ha un codice del tipo:
codice:
PUSH   arg N
PUSH   arg N-1
    ....
PUSH   arg 2
PUSH   arg 1
CALL   Procedure
ADD    ESP,args_size
La procedura chiamata ha un codice del tipo:
codice:
PUSH   EBP
MOV    EBP,ESP
SUB    ESP,locals_size
    ....
    ....
MOV    ESP,EBP
POP    EBP
RET
Lo stack frame quindi č composto cosě:
codice:
  32  bit
/         \

|         |
+---------+
| arg N   | EBP+??
+---------+
| arg N-1 |
+---------+
|   ...   |
+---------+
|   ...   |
+---------+
|  arg 2  |
+---------+
|  arg 1  | EBP+8
+---------+
| old EIP | EBP+4
+---------+
| old EBP | EBP
+---------+
|  local  | EBP-4
+---------+
|   ...   |
+---------+
|   ...   |
+---------+
|  local  | <-- ESP
+---------+
|         |