首页
社区
课程
招聘
[旧帖] [求助]反汇编中变量如何初始化? 0.00雪花
发表于: 2011-7-5 23:19 1507

[旧帖] [求助]反汇编中变量如何初始化? 0.00雪花

2011-7-5 23:19
1507
我知道两种方式:1.通过mov指令将值直接放入变量中;2.通过push 值。
我不明白第二种方式,为什么将值压入堆栈后就能初始化变量?变量如何取得该值?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
一般都是第一种方式的把
2011-7-6 00:09
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
新手第一次回复 mov怎么用的都忘记了
2011-7-6 00:31
0
雪    币: 198
活跃值: (103)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
查下看雪多少了
2011-7-6 01:04
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
5
push将值放到变量有两步操作,第一步先用push将值临时存入堆栈,再用pop将存入堆栈的值放入变量里。
2011-7-6 08:38
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
栈上的是局部变量
2011-7-6 08:40
0
雪    币: 30
活跃值: (10)
能力值: ( 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为变量初始化的?
2011-7-6 09:55
0
雪    币: 248
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
不是有个默认的值吗?-4
2011-7-7 22:19
0
雪    币: 132
活跃值: (19)
能力值: ( 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
2011-7-8 00:36
0
雪    币: 65
活跃值: (10)
能力值: ( 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指针。
2011-7-8 16:58
0
雪    币: 193
活跃值: (64)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
是在弄不明白的话找个调试器,慢慢跟踪吧,跟踪过程中或许就能明白了。
2011-7-8 17:05
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
那也就是说mov     [ebp+var_4], 1其实就是初始化var_4
2011-7-12 13:28
0
游客
登录 | 注册 方可回帖
返回
//