首页
社区
课程
招聘
[旧帖] [求助]esi指令问题 0.00雪花
发表于: 2008-9-22 11:30 3535

[旧帖] [求助]esi指令问题 0.00雪花

2008-9-22 11:30
3535
push    ebp
mov     ebp, esp
sub     esp, 278h
push    ebx
push    esi
push    edi
lea     edi, [ebp+var_278]
mov     ecx, 9Eh
mov     eax, 0CCCCCCCCh
rep stosd
mov     ecx, 0Bh
mov     esi, offset s_SoftwareMicro ;"Software\\Microsoft\\Windows\\Current...
lea     edi, [ebp+SubKey]//请教esi寄存器的变化过程,是怎么传给call调用的。
rep movsd
movsw
mov     esi, esp
lea     eax, [ebp+hKey]
push    eax             ; phkResult
lea     ecx, [ebp+SubKey]
push    ecx             ; lpSubKey
push    HKEY_LOCAL_MACHINE ; hKey
call    ds:RegOpenKeyA(x,x,x)
cmp     esi, esp
call    __chkesp

对应代码:
char regname[]="Software\\Microsoft\\Windows\\CurrentVersion\\Run";
HKEY hkResult;
int ret=RegOpenKey(HKEY_LOCAL_MACHINE,regname,&hkResult);

请高手分析一下call调用参数的过程,不知esi中的子键是怎么传给call的参数的

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

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
2
没什么异状, 不知你问题在那?
2008-9-22 12:00
0
雪    币: 247
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
传递的是 regname数组的地址
2008-9-22 13:45
0
雪    币: 72
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我想问的是最后的call指令对应三个push,也就是三个参数,其中push ecx对应的是注册表子键,我想知道这个键值是怎么从esi传到ecx的,因为在上面的汇编代码处有move esi offset....
后来就在也没有使用esi对别的寄存器付值。
2008-9-23 09:48
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
5
lea     ecx, [ebp+SubKey]

------------------------------

前面有将你说的 mov  esi, offset s_SoftwareMicro
复制到 ebp+SubKey 处了.

mov     esi, offset s_SoftwareMicro ;"Software\\Microsoft\\Windows\\Current...
lea     edi, [ebp+SubKey]//请教esi寄存器的变化过程,是怎么传给call调用的。
rep movsd
movsw
2008-9-23 14:17
0
雪    币: 93
活跃值: (43)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
6
mov     ecx, 0Bh
mov     esi, offset s_SoftwareMicro ;"Software\\Microsoft\\Windows\\Current...
lea     edi, [ebp+SubKey]//请教esi寄存器的变化过程,是怎么传给call调用的。
rep movsd
movsw

我估计你是没明白这个:
rep movsd
这个指令搭配效果是:把

{mov Dword ptr [edi],[esi]
add edi,4
add esi,4
dec ecx
}
一直循环直到ecx=0

明显 开始ecx 保存了regname的长度,然后把
esi=offset s_SoftwareMicro ,
edi=ebp+SubKey
用rep movsd完成了复制的行为
2008-9-23 15:23
0
雪    币: 72
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我明白了,多谢大家!

的确是没有理解rep movsd的原因
2008-9-23 16:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
有点 不明白!
2008-9-23 23:14
0
游客
登录 | 注册 方可回帖
返回
//