您的位置:首页 > 其它

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

2014-08-15 10:09 274 查看

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

                                                                                                      by:比方

逆向反汇编第七章,struct语句反汇编

示例代码:

typedef struct                   ;定义一个名为mystruct的结构体
{
int a;   定义三个"整形"结构体成员,每个成员4个字节,整个结构体共12字节,转换成16进制为0xC
int b;
int c;
}mystruct;

int function(int a,int b)
{
unsigned char *buffer[100];
mystruct *strs=(mystruct*)buffer;
int i;
for(i=0;i<5;i++)
 {
   strs[i].a=0;   //给三个结构体成员进行赋值操作
  strs[i].b=1;
   strs[i].c=2;
 }
return 0;
}

void main()
{
function(1,2);
}


反汇编如下:

#include "stdio.h"

typedef struct //三个整形变量共占用了12字节的空间,转成16进制为0xc;
{

int a;
int b;
int c;

}mystruct;

int function(int a,int b)
{


001A3530 push ebp
001A3531 mov ebp,esp

001A3533 sub esp,270h

001A3539 push ebx
001A353A push esi
001A353B push edi

001A353C lea edi,[ebp-270h]
001A3542 mov ecx,9Ch
001A3547 mov eax,0CCCCCCCCh
001A354C rep stos dword ptr es:[edi] ;开始分配9C个4字节空间,定位到edi,edi是来自[ebp-270h],定位到缓冲区头部并初始化为CC,

unsigned char *buffer[100];
mystruct *strs=(mystruct*)buffer


001A354E lea eax,[buffer]

001A3554 mov dword ptr [strs],eax

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


001A355A mov dword ptr [i],0 第一步: ;i变量赋值为0,int i = 0;
001A3564 jmp function+45h (1A3575h)

001A3566 mov eax,dword ptr [i] 第五步: ;将i变量的值加上个1,然后继续和5做比较,重复"第二步"和"第三步"
001A356C add eax,1
001A356F mov dword ptr [i],eax
001A3575 cmp dword ptr [i],5 第二步: ;比较i是否小于5,i <5;
001A357C jge function+94h (1A35C4h) 第三步: ;如果不小于则跳转到return处,既0x1A35C4h地址处,否则执行下面语句

{
strs[i].a=0;


001A357E mov eax,dword ptr [i]
001A3584 imul eax,eax,0Ch      ;eax=i*12 由于结构体中有三个成员,都是整形,所以占用了12字节的空间
001A3587 mov ecx,dword ptr [strs]
001A358D mov dword ptr [ecx+eax],0     ;strs[i].a=0; 第零个成员赋值为0

strs[i].b=1;


001A3594 mov eax,dword ptr [i]
001A359A imul eax,eax,0Ch        ;eax=i*12
001A359D mov ecx,dword ptr [strs]
001A35A3 mov dword ptr [ecx+eax+4],1   ;strs[i].b=0; 第一个成员赋值为1

strs[i].c=2;


001A35AB mov eax,dword ptr [i]

001A35B1 imul eax,eax,0Ch
001A35B4 mov ecx,dword ptr [strs]
001A35BA mov dword ptr [ecx+eax+8],2              ;给第二个成员赋值为2

}
001A35C2 jmp function+36h (1A3566h)            第四步:执行到0x001A3566地址处

return 0;


001A35C4 xor eax,eax

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: