JavascriptProva

venerdì 18 maggio 2012

Variabile e puntatore locali nello stack in OllyDbg

Adesso dichiariamo una variabile e un puntatore locali, sempre inizializzando il puntatore con l'indirizzo della variabile.
#include<stdio.h>

void main(){
 
 int variabile=0xCACACACA;;
 int *puntatore=&variabile;
 getc(stdin); 
}
Ecco in OllyDbg una parte dello stack durante l'esecuzione della funzione main, prima delle istruzioni che dichiarano la variabile e il puntatore:
0016FBB0   CCCCCCCC
0016FBB4   CCCCCCCC
0016FBB8   CCCCCCCC
0016FBBC   CCCCCCCC
0016FBC0   CCCCCCCC
0016FBC4   CCCCCCCC
0016FBC8   CCCCCCCC
0016FBCC   CCCCCCCC
0016FBD0   CCCCCCCC
0016FBD4   CCCCCCCC
0016FBD8   CCCCCCCC
0016FBDC   CCCCCCCC
0016FBE0   CCCCCCCC
0016FBE4   CCCCCCCC
0016FBE8   CCCCCCCC
0016FBEC  /0016FBF8
0016FBF0  |76A04B29  RETURN to kernel32.76A04B29
0016FBF4  |7FFDE000
0016FBF8  ]0016FC38
0016FBFC  |77C3E1C6  RETURN to ntdll.77C3E1C6
Dopo che viene dichiarata la variabile, di valore 0xCACACACA:

0016FBB0   CCCCCCCC
0016FBB4   CCCCCCCC
0016FBB8   CCCCCCCC
0016FBBC   CCCCCCCC
0016FBC0   CCCCCCCC
0016FBC4   CCCCCCCC
0016FBC8   CCCCCCCC
0016FBCC   CCCCCCCC
0016FBD0   CCCCCCCC
0016FBD4   CCCCCCCC
0016FBD8   CCCCCCCC
0016FBDC   CCCCCCCC
0016FBE0   CCCCCCCC
0016FBE4   CACACACA
0016FBE8   CCCCCCCC
0016FBEC  /0016FBF8
0016FBF0  |76A04B29  RETURN to kernel32.76A04B29
0016FBF4  |7FFDE000
0016FBF8  ]0016FC38
0016FBFC  |77C3E1C6  RETURN to ntdll.77C3E1C6
E dopo che viene inizializzato il puntatore:
0016FBB0   CCCCCCCC
0016FBB4   CCCCCCCC
0016FBB8   CCCCCCCC
0016FBBC   CCCCCCCC
0016FBC0   CCCCCCCC
0016FBC4   CCCCCCCC
0016FBC8   CCCCCCCC
0016FBCC   CCCCCCCC
0016FBD0   CCCCCCCC
0016FBD4   CCCCCCCC
0016FBD8   0016FBE4
0016FBDC   CCCCCCCC
0016FBE0   CCCCCCCC
0016FBE4   CACACACA
0016FBE8   CCCCCCCC
0016FBEC  /0016FBF8
0016FBF0  |76A04B29  RETURN to kernel32.76A04B29
0016FBF4  |7FFDE000
0016FBF8  ]0016FC38
0016FBFC  |77C3E1C6  RETURN to ntdll.77C3E1C6
...che contiene l'indirizzo nello stack della variabile locale!
Il codice in Assembly delle due istruzioni che dichiarano variabile e puntatore è:
00D413AE   C745 F8 CACACACA MOV DWORD PTR SS:[EBP-8],CACACACA
00D413B5   8D45 F8          LEA EAX,DWORD PTR SS:[EBP-8]
00D413B8   8945 EC          MOV DWORD PTR SS:[EBP-14],EAX
L'indirizzo della variabile locale nello stack viene copiato nel registro EAX e quindi copiato da questa nello stack.

Nessun commento:

Posta un commento