能力值:
( LV2,RANK:10 )
|
-
-
2 楼
一般都是第一种方式的把
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
新手第一次回复 mov怎么用的都忘记了
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
查下看雪多少了
|
能力值:
(RANK:410 )
|
-
-
5 楼
push将值放到变量有两步操作,第一步先用push将值临时存入堆栈,再用pop将存入堆栈的值放入变量里。
|
能力值:
( LV5,RANK:60 )
|
-
-
6 楼
栈上的是局部变量
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
我在分析一个函数的时候发现该函数的一个局部变量在使用前并没有用mov来初始化,那么我猜测是用push来初始化的,代码如下:
.text:0059E27A sub_59E27A proc near ; CODE XREF: sub_59E831+60p
.text:0059E27A ; sub_59FD37+40Bp
.text:0059E27A
.text:0059E27A var_4 = dword ptr -4
.text:0059E27A arg_0 = dword ptr 8
.text:0059E27A
.text:0059E27A mov edi, edi
.text:0059E27C push ebp
.text:0059E27D mov ebp, esp
.text:0059E27F push ecx
.text:0059E280 push esi
.text:0059E281 push edi
.text:0059E282 mov esi, ecx
.text:0059E284 xor edi, edi
.text:0059E286 cmp [esi+8Ch], edi
.text:0059E28C jnz short loc_59E298
.text:0059E28E mov eax, 8000FFFFh
.text:0059E293 jmp loc_59E37B
.text:0059E298 ; ---------------------------------------------------------------------------
.text:0059E298
.text:0059E298 loc_59E298: ; CODE XREF: sub_59E27A+12j
.text:0059E298 lea eax, [ebp+var_4]
.text:0059E29B push eax
.text:0059E29C mov [ebp+var_4], 1
.text:0059E2A3 call sub_5BD64B
局部变量var_4是如何初始化的?没有用mov那肯定是用了push,而函数的开头,push ecx应该是为局部变量分配空间,那么是不是后面的push esi或push edi为变量初始化的?
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
不是有个默认的值吗?-4
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
mov ebp, esp
push ecx
lea eax, [ebp+var_4]
[ebp+var_4]==ecx
我怀疑你是C++程序 而ECX 存的是对象。你这段 jnz short loc_59E298 是检查对象的某个属性是否为0。不为0 的话 设置这个对象的 首4字节 为1 然后调用 sub_5BD64B
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
[QUOTE=luyikk;978085]mov ebp, esp
push ecx
lea eax, [ebp+var_4]
[ebp+var_4]==ecx
我怀疑你是C++程序 而ECX 存的是对象。你这段 jnz short loc_59E298 是检查对象的某个属性是否为0...[/QUOTE]
luyikk解释的对,这个函数应该为C++的成员函数,C++的成员函数的调用方式为_thiscal,ecx存放类的this指针。
|
能力值:
( LV3,RANK:30 )
|
-
-
11 楼
是在弄不明白的话找个调试器,慢慢跟踪吧,跟踪过程中或许就能明白了。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
那也就是说mov [ebp+var_4], 1其实就是初始化var_4
|
|
|