您的位置:首页 > 其它

反汇编逆向实例_unoin语句反汇编

2014-08-15 10:21 246 查看

反汇编逆向实例_unoin语句反汇编

                                                                                                   by:比方

逆向反汇编第六章,unoin语句反汇编

示例代码:

#include"stdio.h"
typedef enum            定义一个名为myenum的枚举体
{
ENUM_1=1,
ENUM_2=2,
ENUM_3,
ENUM_4
}myenum;
typedef struct               定义一个名为mystruct的结构体
{
int a;
int b;
int c;
}mystruct;
typedef union                定义一个名为myunion的共用体
{
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);
}


反汇编结果:

#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] ;开始分配9C个4字节空间,定位到edi,edi是来自[ebp-270h],定位到缓冲区头部并初始化为CC,

myunion *uns=(myunion*)buffer;


0108356E lea eax,[buffer] ;缓冲区内容赋值给uns
01083574 mov dword ptr [uns],eax

int i;
for(i=0;i<5;i++)


0108357A mov dword ptr [i],0 ;IF分支语句比较容易识别,且在前面章节中有所介绍,故不再重复介绍。
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] ;取得i元素放入到eax,然后eax乘上的0ch后,结果放回eax寄存器中,(注意此处是有符号乘法)
010835A4 imul eax,eax,0Ch
010835A7 mov ecx,dword ptr [uns] ;把uns放入到ecx中,在把0值赋值给,eax+ecx,所以结果就是 uns的[i]元素 = 0;
010835AD mov dword ptr [ecx+eax],0

uns[i].s.b=1;


010835B4 mov eax,dword ptr [i] ;以下结果类似,这里可以看到一个+4的动作,而32位操作系统默认是4字节,
                            ;所以这里实际上是操作他的第二个元素,如果是+8就是操作它的第三个元素,结果自推(…)。
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
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: