反汇编系列(八) union

#include"stdio.h"
typedefenum
{
    ENUM_1=1,
    ENUM_2=2,
    ENUM_3,
    ENUM_4
}myenum;
typedefstruct
{
    int a;
    int b;
    int c;
}mystruct;
typedefunion
{
    mystruct s;
myenum e[3];
}myunion;
int function(int a,int b)
{
    unsigned char *buffer[100]={0};
    myunion *uns=(myunion*)buffer;
    int i;
    for(i=0;i<5;i++)
    {
        uns[i].s.a=0;
        uns[i].s.b=1;
        uns[i].e[1]=ENUM_4;
    }
    return 0;
}
void main()
{
    function(1,2);
} 


--- c:\users\wangchao\desktop\test\test\main.cpp -------------------------------
#include "stdio.h"
typedef enum
{
    ENUM_1=1,
    ENUM_2=2,
    ENUM_3,
    ENUM_4
}myenum;
typedef struct
{
    int a;
    int b;
    int c;
}mystruct;
typedef union
{
    mystruct s;
    myenum e[3];
}myunion;
int function(int a,int b)
{
01083530 push ebp
01083531 mov ebp,esp
01083533 sub esp,270h
01083539 push ebx
0108353A push esi
0108353B push edi
0108353C lea edi,[ebp-270h]
01083542 mov ecx,9Ch
01083547 mov eax,0CCCCCCCCh
0108354C rep stos dword ptr es:[edi]
    unsigned char *buffer[100]={0};
0108354E mov dword ptr [buffer],0
01083558 push 18Ch
0108355D push 0
0108355F lea eax,[ebp-190h]
01083565 push eax
01083566 call @ILT+470(_memset) (10811DBh)
0108356B add esp,0Ch
    myunion *uns=(myunion*)buffer;
0108356E lea eax,[buffer]
01083574 mov dword ptr [uns],eax
    int i;
    for(i=0;i<5;i++)
0108357A mov dword ptr [i],0
01083584 jmp function+65h (1083595h)
01083586 mov eax,dword ptr [i]
0108358C add eax,1
0108358F mov dword ptr [i],eax
01083595 cmp dword ptr [i],5
0108359C jge function+0B4h (10835E4h)
    {
        uns[i].s.a=0;
0108359E mov eax,dword ptr [i]
010835A4 imul eax,eax,0Ch
010835A7 mov ecx,dword ptr [uns]
010835AD mov dword ptr [ecx+eax],0
        uns[i].s.b=1;
010835B4 mov eax,dword ptr [i]
010835BA imul eax,eax,0Ch
010835BD mov ecx,dword ptr [uns]
010835C3 mov dword ptr [ecx+eax+4],1
        uns[i].e[1]=ENUM_4;
010835CB mov eax,dword ptr [i]
010835D1 imul eax,eax,0Ch
010835D4 mov ecx,dword ptr [uns]
010835DA mov dword ptr [ecx+eax+4],4
    }
010835E2 jmp function+56h (1083586h)
    return 0;
010835E4 xor eax,eax
}
010835E6 push edx
010835E7 mov ecx,ebp
010835E9 push eax
010835EA lea edx,[ (108360Ch)]
010835F0 call @ILT+130(@_RTC_CheckStackVars@8) (1081087h)
010835F5 pop eax
010835F6 pop edx
010835F7 pop edi
010835F8 pop esi
010835F9 pop ebx
010835FA add esp,270h
01083600 cmp ebp,esp
01083602 call @ILT+315(__RTC_CheckEsp) (1081140h)
01083607 mov esp,ebp
01083609 pop ebp
0108360A ret
0108360B nop
0108360C db 01h
0108360D db 00h
0108360E db 00h
0108360F db 00h
01083610 db 14h
01083611 db 36h
01083612 db 08h
01083613 db 01h
01083614 db 6ch
01083615 db feh
01083616 db ffh
01083617 db ffh
01083618 db 90h
01083619 db 01h
0108361A db 00h
0108361B db 00h
0108361C db 20h
0108361D db 36h
0108361E db 08h
0108361F db 01h
01083620 db 62h
01083621 db 75h
01083622 db 66h
01083623 db 66h
01083624 db 65h
01083625 db 72h

01083626 db 00h

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值