注册 登录
编程论坛 汇编论坛

关于自己反汇编的一个的一个DLL 中某个函数不是很了解,请高手过来指点一下

wsz9903011 发布于 2011-07-03 23:20, 831 次点击
push ebp
mov  ebp,esp
mov  eax,000010f0
call 1001105A  ;这里面迷糊
push ebx
push esi
push edi
lea  edi,dword ptr [ebp+FFFFEF10];其实就是开辟ebp-10f0 局部空间
mov ecx,0000043c
mov eax,cccccccc
repz
stosd  ;初始化 局部空间 全部填充为 0xcc

========================================
但call 1001105A 里面的 是干嘛的? 是开辟局部空间的?

push ecx ;设置一个小的局部变量????
lea ecx,dword ptr [esp+04]; 指向返回地址的 堆栈??
sub ecx,eax ;ecx-10f0
sbb eax,eax
not eax
and ecx,eax
mov eax,esp
and eax,FFFFF000;这一步想干嘛??

L2: cmp ecx,eax
jb  L1 ;这里我简化下用L1代替   下面都不是很明白 最后怎么平衡堆栈啊  esp 跟 eax 都对换了 ret还怎么回去?

mov eax,ecx
pop ecx
xchg eax,esp
mov eax,dword ptr [eax]
mov dword ptr [esp],eax
ret

L1: sub eax,00001000
test dword ptr [eax],eax
jmp L2
5 回复
#2
八画小子2011-07-03 23:53
call 1001105A  调运1001105A对应的过程
#3
八画小子2011-07-03 23:54
回复 楼主 wsz9903011
push ecx ;保存ECX,以便以后恢复
#4
八画小子2011-07-03 23:56
回复 楼主 wsz9903011
jb  L1 ;这里我简化下用L1代替   下面都不是很明白 最后怎么平衡堆栈啊  esp 跟 eax 都对换了 ret还怎么回去?
没有换
#5
八画小子2011-07-03 23:59
回复 楼主 wsz9903011
lea ecx,dword ptr [esp+04];如果没搞错,是返回地址的地址
#6
wsz99030112011-07-04 00:12
下面那个循环干嘛的? 好像没什么意义
1