能力值:
( LV4,RANK:50 )
|
-
-
2 楼
1 ebp从第3行开始就是不会变的
2 ecx = ebp - 8
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
ecx=ebp-8 这个我知道,但是去找ebp的值,这个值变化无常,就像一般不会有人去找esp的值一样吧,应该怎么找呢?
我现在就是想回溯出ecx的值!
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
最后一句等价
mov ecx,ebp
sub ecx,8
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
ecx就是这个函数里的第2个局部变量的地址
|
能力值:
( LV7,RANK:100 )
|
-
-
6 楼
在当前call的栈空间,ebp指向基址,除开场景保护的代码,ebp的址是不会变化的,一般用他来取变量或参数。
ebp(+-)x 就指向的是地址,所以需要[]
在OD的命令中输入 d ecx或 d [ebp-8]就是地址指向的值..
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
X86中堆栈向低地址增涨。
根据函数调用规则:
ebp-n 代表局部变量
ebp+n 代表函数参数(当然EAX,EBX,ECX,也可能函数参数)
最后3句应该是函数调用前的参数传递语句。
要调用的函数有一个指针型参数,指向当前函数的局部变量。
至于最后一句使用该种方法取址可能是IA20时,地址是20位的,寄存器是16位的。CX=BP-8得到得并不是地址,还缺了段选。(猜测)
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
005FE1B0 /$ 55 push ebp ;
005FE1B1 |. 8BEC mov ebp, esp ;前两句是保护现场
005FE1B3 |. 83EC 0C sub esp, 0C ;分配函数所需要的空间
005FE1B6 |. 894D F4 mov dword ptr [ebp-C], ecx;把ecx覆盖局部变量
005FE1B9 |. 8B45 08 mov eax, dword ptr [ebp+8];拷贝第二个入参
005FE1BC |. 50 push eax ;入参压栈
005FE1BD |. 8D4D F8 lea ecx, dword ptr [ebp-8] ; ECX为ebp-8 即一个局部变量的地址。
注释:
lea是一个多目运算符,含义如下:
示例1:
lea eax, dword ptr [eax * 5 + 3]
等价于
eax = eax * 5 + 3
示例2:
lea ebx, str
等价于
ebx = &str
|
|
|