Perché il mio stack contiene l'indirizzo di ritorno di __libc_csu_init dopo l'inizializzazione di main?

0

Ho scritto un semplice programma in C, l'ho compilato, aperto in gdb, impostato un breakpoint alla riga 11 e controllato lo stack.

  1 #include<stdio.h>
  2
  3 int main(int argc, char *argv[]){
  4     char arr[4] = "AABB";
  5     int square = foo(2);
  6     exit(0);
  7 }
  8
  9 int foo(int x){
 10     char buff[4] = "CCDD";
 11     printf("Enter a value:"); // set breakpoint for this line
 12     gets(buff);
 13     return x*x;
 14 }
 15
 16 void bar(){
 17     printf("This program was hacked");
 18 }
 19

Quando ho guardato lo stack ho scoperto che dopo che la funzione principale è stata inizializzata ma prima che foo (x) venisse chiamata, posto 2 stack per __libc_csu_init sullo stack. Capisco che ogni programma chiama init e fini, ma questi riferimenti non dovrebbero essere messi in pila prima che venga chiamata la funzione principale?

(gdb) x/16a $esp
0xbffff110:    0x8000    0x44444343    0xbffff148    0x8048442 <main+48>
0xbffff120:    0x2    0xb7fbe000    0x804a000    0x80484c1 <__libc_csu_init+33>
0xbffff130:    0xb7fbe3bc    0x8048218    0x80484a9 <__libc_csu_init+9>    0x0
0xbffff140:    0x1    0x42424141    0x0    0xb7e0c5a6

Perché 0x42424141 ha un indirizzo più alto di __libc_csu_init?

    
posta Hugh Pearse 21.10.2018 - 13:34
fonte

1 risposta

2

Per quanto ne so, __libc_csu_init e main sono entrambi gli argomenti inseriti nello stack in ordine inverso prima della chiamata a __libc_start_main .

Questa illustrazione di esempio mostra anche il principale su un indirizzo inferiore:

    
risposta data 21.10.2018 - 23:26
fonte

Leggi altre domande sui tag