首页
社区
课程
招聘
[旧帖] [求助]堆栈平衡求助 0.00雪花
发表于: 2010-5-25 08:32 4850

[旧帖] [求助]堆栈平衡求助 0.00雪花

2010-5-25 08:32
4850
我是汇编新人 求助堆栈平衡问题
我知道堆栈的一些理论 就是RETN的时候 返回到我下句执行的地址吧
我是这么理解的
但是还是不会啊

008C7722   > /8A07          mov     al, byte ptr [edi]
008C7724   . |38043B        cmp     byte ptr [ebx+edi], al
008C7727   . |74 24         je      short 008C774D
008C7729   . |84C0          test    al, al
008C772B   . |BD E8030000   mov     ebp, 3E8
008C7730   . |79 0A         jns     short 008C773C
008C7732     |0FB706        movzx   eax, word ptr [esi]
008C7735     |6A 01         push    1
008C7737   . |6A FF         push    -1
008C7739   . |50            push    eax
008C773A   . |EB 08         jmp     short 008C7744
008C773C   > |0FB70E        movzx   ecx, word ptr [esi]
008C773F   . |6A 00         push    0
008C7741   . |6A FF         push    -1
008C7743   . |51            push    ecx
008C7744   > |8B4C24 34     mov     ecx, dword ptr [esp+34]
008C7748   . |E8 B333FDFF   call    0089AB00                         ;  调用这个CALL
008C774D   > |83C6 02       add     esi, 2
008C7750   . |83C7 01       add     edi, 1
008C7753   . |81FE 50C1E500 cmp     esi, 00E5C150
008C7759   .^\7C C7         jl      short 008C7722

这是od反汇编后的代码
我调用这个CALL总是遇到堆栈平衡问题 我我的代码
        __asm
        {
                push 1
                push -1
                mov  eax,0x31   
                push    eax
                mov ebx,0x0089AB00
                call ebx
        }
这里我该怎么写这个ESP以达到堆栈平横呢

0089AB00  /$  83EC 1C       sub     esp, 1C                          ;  CALL代码
0089AB03  |.  55            push    ebp
0089AB04  |.  8BE9          mov     ebp, ecx
0089AB06  |.  8B85 90040000 mov     eax, dword ptr [ebp+490]
0089AB0C  |.  85C0          test    eax, eax
0089AB0E  |.  56            push    esi
0089AB0F  |.  8B7424 28     mov     esi, dword ptr [esp+28]
0089AB13  |.  C64424 0B 00  mov     byte ptr [esp+B], 0
0089AB18  |.  74 13         je      short 0089AB2D
0089AB1A  |.  56            push    esi
0089AB1B  |.  8D4C24 0F     lea     ecx, dword ptr [esp+F]
0089AB1F  |.  51            push    ecx
0089AB20  |.  FFD0          call    eax
0089AB22  |.  807C24 0B 00  cmp     byte ptr [esp+B], 0
0089AB27  |.  0F85 3E010000 jnz     0089AC6B
0089AB2D  |>  53            push    ebx
0089AB2E  |.  8B5C24 34     mov     ebx, dword ptr [esp+34]
0089AB32  |.  84DB          test    bl, bl
0089AB34  |.  74 3B         je      short 0089AB71
0089AB36  |.  81FE 00010000 cmp     esi, 100
0089AB3C  |.  8BC6          mov     eax, esi
0089AB3E  |.  7C 06         jl      short 0089AB46
0089AB40  |.  8D86 18FDFFFF lea     eax, dword ptr [esi-2E8]
0089AB46  |>  3D 09040000   cmp     eax, 409
0089AB4B  |.  72 07         jb      short 0089AB54
0089AB4D  |.  8BCD          mov     ecx, ebp
0089AB4F  |.  E8 C1BDB6FF   call    00406915
0089AB54  |>  8BC8          mov     ecx, eax
0089AB56  |.  83E1 1F       and     ecx, 1F
0089AB59  |.  BA 01000000   mov     edx, 1
0089AB5E  |.  D3E2          shl     edx, cl
0089AB60  |.  C1E8 05       shr     eax, 5
0089AB63  |.  C74424 2C 010>mov     dword ptr [esp+2C], 1
0089AB6B  |.  855485 00     test    dword ptr [ebp+eax*4], edx
0089AB6F  |.  74 08         je      short 0089AB79
0089AB71  |>  C74424 2C 000>mov     dword ptr [esp+2C], 0
0089AB79  |>  84DB          test    bl, bl
0089AB7B  |.  74 5F         je      short 0089ABDC
0089AB7D  |.  F605 F44B2301>test    byte ptr [1234BF4], 1
0089AB84  |.  75 1E         jnz     short 0089ABA4
0089AB86  |.  830D F44B2301>or      dword ptr [1234BF4], 1
0089AB8D  |.  B9 60472301   mov     ecx, 01234760
0089AB92  |.  E8 09FEFFFF   call    0089A9A0
0089AB97  |.  68 B0F4D000   push    00D0F4B0
0089AB9C  |.  E8 A3002200   call    00ABAC44
0089ABA1  |.  83C4 04       add     esp, 4
0089ABA4  |>  57            push    edi
0089ABA5  |.  8B3D 80472301 mov     edi, dword ptr [1234780]
0089ABAB  |.  8BCF          mov     ecx, edi
0089ABAD  |.  C1E9 0C       shr     ecx, 0C
0089ABB0  |.  8BC7          mov     eax, edi
0089ABB2  |.  C1E8 0E       shr     eax, 0E
0089ABB5  |.  80E1 01       and     cl, 1
0089ABB8  |.  8BD7          mov     edx, edi
0089ABBA  |.  C1EA 0C       shr     edx, 0C
0089ABBD  |.  24 01         and     al, 1
0089ABBF  |.  80E2 02       and     dl, 2
0089ABC2  |.  F6D9          neg     cl
0089ABC4  |.  1AC9          sbb     cl, cl
0089ABC6  |.  5F            pop     edi
0089ABC7  |.  83E1 04       and     ecx, 4
0089ABCA  |.  0AD1          or      dl, cl
0089ABCC  |.  F6D8          neg     al
0089ABCE  |.  1AC0          sbb     al, al
0089ABD0  |.  83E0 08       and     eax, 8
0089ABD3  |.  0AD0          or      dl, al
0089ABD5  |.  88942E 840000>mov     byte ptr [esi+ebp+84], dl
0089ABDC  |>  0FB6842E 8400>movzx   eax, byte ptr [esi+ebp+84]
0089ABE4  |.  094424 2C     or      dword ptr [esp+2C], eax
0089ABE8  |.  84DB          test    bl, bl
0089ABEA  |.  75 07         jnz     short 0089ABF3
0089ABEC  |.  889C2E 840000>mov     byte ptr [esi+ebp+84], bl
0089ABF3  |>  53            push    ebx
0089ABF4  |.  56            push    esi
0089ABF5  |.  8BCD          mov     ecx, ebp
0089ABF7  |.  E8 94FEFFFF   call    0089AA90
0089ABFC  |.  8B4424 30     mov     eax, dword ptr [esp+30]
0089AC00  |.  85C0          test    eax, eax
0089AC02  |.  8B4C24 2C     mov     ecx, dword ptr [esp+2C]
0089AC06  |.  7D 41         jge     short 0089AC49
0089AC08  |.  F6C1 02       test    cl, 2
0089AC0B  |.  75 28         jnz     short 0089AC35
0089AC0D  |.  F6C1 04       test    cl, 4
0089AC10  |.  74 0D         je      short 0089AC1F
0089AC12  |.  8D56 9F       lea     edx, dword ptr [esi-61]
0089AC15  |.  83FA 1E       cmp     edx, 1E
0089AC18  |.  77 1B         ja      short 0089AC35
0089AC1A  |.  8D46 A0       lea     eax, dword ptr [esi-60]
0089AC1D  |.  EB 2A         jmp     short 0089AC49
0089AC1F  |>  F6C1 08       test    cl, 8
0089AC22  |.  74 15         je      short 0089AC39
0089AC24  |.  8D46 E0       lea     eax, dword ptr [esi-20]
0089AC27  |.  83F8 5F       cmp     eax, 5F
0089AC2A  |.  77 09         ja      short 0089AC35
0089AC2C  |.  0FBE86 A08CE5>movsx   eax, byte ptr [esi+E58CA0]
0089AC33  |.  EB 14         jmp     short 0089AC49
0089AC35  |>  33C0          xor     eax, eax
0089AC37  |.  EB 10         jmp     short 0089AC49
0089AC39  |>  B8 DF000000   mov     eax, 0DF
0089AC3E  |.  8D56 E0       lea     edx, dword ptr [esi-20]
0089AC41  |.  3BC2          cmp     eax, edx
0089AC43  |.  1BC0          sbb     eax, eax
0089AC45  |.  F7D0          not     eax
0089AC47  |.  23C6          and     eax, esi
0089AC49  |>  F6DB          neg     bl
0089AC4B  |.  51            push    ecx
0089AC4C  |.  50            push    eax
0089AC4D  |.  56            push    esi
0089AC4E  |.  8D4C24 1C     lea     ecx, dword ptr [esp+1C]
0089AC52  |.  1BDB          sbb     ebx, ebx
0089AC54  |.  83C3 02       add     ebx, 2
0089AC57  |.  53            push    ebx
0089AC58  |.  E8 93640200   call    008C10F0
0089AC5D  |.  50            push    eax
0089AC5E  |.  E8 2D3BFFFF   call    0088E790
0089AC63  |.  8BC8          mov     ecx, eax
0089AC65  |.  E8 263CFFFF   call    0088E890
0089AC6A  |.  5B            pop     ebx
0089AC6B  |>  5E            pop     esi
0089AC6C  |.  5D            pop     ebp
0089AC6D  |.  83C4 1C       add     esp, 1C
0089AC70  \.  C2 0C00       retn    0C

关键也就这里的ESP吧 请大侠们指教

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

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 93
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看不懂
2010-5-25 09:16
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
还自己搞定
原来这里已经自己堆栈平衡了
还有个ECX需要赋值

        _asm
        {
                push 1
                push -1
                push 0x9  
                mov ecx,0x01234760
                mov ebx,0x0089AB00
                call ebx
        }

这个是游戏的DInput键盘的相关CALL具体游戏也不一样
2010-5-25 09:56
0
游客
登录 | 注册 方可回帖
返回
//