我是汇编新人 求助堆栈平衡问题
我知道堆栈的一些理论 就是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虚拟机自动化脱壳的方法