做数据逆向分析最先应该区分数据是常量、变量,还是指针。可是作为二进制数据本身不会标记自己是什么,然而编译器将不同的的类别储存在不同的区域。
变量数据应分为这两类:
1. 局部非静态变量:对于1KB以下的该种变量,一般都要放在栈区,那么它的寻址必然用到ebp寄存器来间接变址进行寻址。另外,有些编译器(比如gcc)出于优化考虑,也会用到esp寄存器。
举例:
void fun()
{
int i=0;
char a[5]="AAAA";
}
//vc2005Debug版反汇编
void fun()
{
-------------------------------------------------保护寄存器数据
00411390 push ebp
00411391 mov ebp,esp
00411393 sub esp,0E0h
00411399 push ebx
0041139A push esi
0041139B push edi