能力值:
( LV2,RANK:10 )
|
-
-
2 楼
子调用
mov eax, ecx
mov byte ptr [eax], 16
mov byte ptr [eax+1], 60
mov dword ptr [eax+6], 0
retn
其实是隐式返回了值,改变了eax值,返回eax
所以原程序mov dword ptr [esp+12CE], eax是正确的
而你的mov dword ptr [esp+0E], eax ;eax都没有初始化,怎么会正确啊?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
lea ecx, dword ptr [esp+12C0] //[esp+12C0]=[12E408],[12E408]=0
call 006A78D0
push edi //edi=0
lea ecx, dword ptr [esp+12C4] //压栈一次esp-4,相当于[esp+12C4]=[12E408]
push 0A
push ecx
mov dword ptr [esp+12CE], eax //共压栈3次,相当于[esp+12C4]=[12E408]
add esp, 0C
mov ecx, dword ptr [C0980C]
mov edx, dword ptr [ecx]
push edi
push 0A
lea eax, dword ptr [esp+12C8] //add esp, 0C,再压2次栈,[esp+12C8]=]=[12E408]
push eax
call dword ptr [edx+10]
所以,这里的操作,基本上都是针对固定的栈地址=[12E408]操作的!
可以先保存下这个地址,写起来就清晰多了
mov ebp,esp
mov byte ptr [ebp], 16
mov byte ptr [ebp+1], 60
mov dword ptr [ebp+6], 0
push 0
mov ecx,ebp //这里相当于这个,不存在不可读的问题
push 0A
push ecx
mov dword ptr [ebp], ebp //这里eax=ebp=12E408,相当于【12E408】=12E408,也不存在不可写的问题
mov ecx, dword ptr [C0980C]
mov edx, dword ptr [ecx]
push 0
push 0A
mov eax,ebp
push eax
call dword ptr [edx+10]
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
感谢举剑问天,这两天比较忙,没顾上回,刚才测试了下,还是崩溃,连结果也得不到了~
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
崩溃的原因不在此,而是因为数据验证部分,我再慢慢找吧,再次感谢~
|
|
|