首页
社区
课程
招聘
这个CALL调用的时候为什么要重复写赋值?
发表于: 2011-8-24 03:57 4904

这个CALL调用的时候为什么要重复写赋值?

2011-8-24 03:57
4904
反汇编的时候找到了一个软件CALL。
push 0
movzx ecx,[eax+12]               //[eax+12]可以直接用数值代替
movzx edx,[eax+10]              //[eax+10]可以直接用数值代替
mov eax,[652f10]                   //经测试[652f10]中的值为69a810
mov eax,[eax]                //这里[eax]中的值为150af00
call 0052c8d8

我在VC中调用该CALL的时候,发现调用不成功,内联汇编代码如下:
push 0
mov ecx,0x150
mov edx,0x144
mov eax,[0x652f10]       
mov eax,[eax]
call 0052c8d8

由于这个CALL以前有人找过,但是他只放出了原形,其中提到mov eax,[eax]这句要写两次,没说明为什么。
我按照这个方法在VC中重写了这个CALL:
push 0
mov ecx,0x150
mov edx,0x144
mov eax,[0x652f10]       
mov eax,[eax]
mov eax,[eax]
call 0052c8d8
经测试,这个CALL就可以正常使用了,我想问下这是为什么呢?
我用OD找了下,[eax]中的值150af00,这个值不是个地址,只是个数值,为什么这样写就能调用成功?

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 10726
活跃值: (2730)
能力值: ( LV5,RANK:71 )
在线值:
发帖
回帖
粉丝
2
mov eax,ds:[0x652f10]//you can test
2011-8-24 08:41
0
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=tztztztz;993890]反汇编的时候找到了一个软件CALL。
push 0
movzx ecx,[eax+12]               //[eax+12]可以直接用数值代替
movzx edx,[eax+10]              //[eax+10]可以直接用数值代替
mov eax,[652f10...[/QUOTE]

从代码的角度来说,象个2重指针。但你说了又不是,奇怪了。
2011-8-26 17:27
0
雪    币: 193
活跃值: (64)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
跟调用CALL eax的最终数据
你这两个CALL的EAX 99.9%的情况下不一样的
2011-8-26 17:40
0
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
5
反汇编中显示的代码不规范。

内联汇编中
mov eax,[0x652f10]  

mov eax,0x652f10
是等价的

如果要将0x652f10地址处的值放入eax中,应写成
mov eax,dword ptr ds:[0x652f10]
或者直接写成
mov eax,ds:[0x652f10]
也可以
2011-8-26 17:48
0
雪    币: 2242
活跃值: (488)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
6
mov eax,[0x652f10]
vc会给你编译成 mov eax,0x652f10
2011-8-26 17:53
0
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
楼上2位说的有道理。
2011-8-26 18:44
0
雪    币: 190
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
[QUOTE=QEver;994766]反汇编中显示的代码不规范。

内联汇编中
mov eax,[0x652f10]  

mov eax,0x652f10
是等价的

如果要将0x652f10地址处的值放入eax中,应写成
mov eax,dword ptr ds:[0x652f10]
或者直接写成
mov eax,ds:[0x65...[/QUOTE]

额。。。
那为什么我以前找的其他CALL,
比如:
         mov ebx,[地址]
         CALL xxxxxxx
然后,我在VC中写内联汇编:
         mov ebx,[地址]
         CALL xxxxxxx
显然EBX里面存的是该地址的值。为什么这样能成功?
2011-8-27 05:57
0
雪    币: 76
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
[QUOTE=疯子;994768]mov eax,[0x652f10]
vc会给你编译成 mov eax,0x652f10[/QUOTE]

又学习了,VC内联汇编不可靠哇
2011-9-7 15:08
0
游客
登录 | 注册 方可回帖
返回
//