2013-08-19 8 views
7

Non riesco a capire dove vengono restituite le istruzioni di assemblaggio retq.Istruzione Retq, dove restituisce

Capisco che quando viene eseguito il codice normale, viene restituito all'indirizzo specificato nello stack. Ma come fa a sapere dove si trova l'indirizzo di ritorno nello stack?

In breve, utilizza rbp o esp per trovare l'indirizzo nello stack?

+1

Se si vuole sperimentare, provare a sostituire 'retq' con' addq $ 8,% rsp; jmpq -8 (% rsp) '. Funzionalmente equivalente (non per quanto riguarda le prestazioni). –

risposta

3

dopo codice assembly studio, qui è il mio pensiero: diamo un'occhiata a un campione:

fun: 
push %rbp 
mov %rsp,%rbp 
... 
... 
pop %rbp 
retq 

main: 
... 
... 
callq "address" <fun> 
... 
... 

possiamo vedere c'è un'istruzione prima di RETQ. il "pop% rbp" (a volte si tratta di un'istruzione di congedo, ma ci sono simili) di istruzioni sarà

  1. spostare il contenuto della corrente del puntatore dello stack (RSP) punti e salvare stack pointer base (RSP).
  2. sposta rsp e puntatore al precedente indirizzo in pila.

ad esempio: prima comando pop: RSP è stato sottolineato 0x0000 0000 0000 00D0

dopo comando pop: 0x0000 0000 0000 00D8 (assumere la pila cresce dall'alto indirizzo a partire indirizzo)

dopo il comando pop, ora rsp punta a un nuovo indirizzo e retq prende questo indirizzo come indirizzo di ritorno.

+0

Intendi rbp in "e salva nel puntatore dello stack di base (rsp)."? –

Problemi correlati