反汇编逆向实例_struct 语句反汇编
反汇编逆向实例_struct 语句反汇编
by:比方
逆向反汇编第七章,struct语句反汇编
示例代码:
1 typedef struct ;定义一个名为mystruct的结构体 2 { 3 int a; 定义三个"整形"结构体成员,每个成员4个字节,整个结构体共12字节,转换成16进制为0xC 4 int b; 5 int c; 6 }mystruct;
7 int function(int a,int b) 8 { 9 unsigned char *buffer[100]; 10 mystruct *strs=(mystruct*)buffer; 11 int i; 12 for(i=0;i<5;i++) 13 { 14 strs[i].a=0; //给三个结构体成员进行赋值操作 15 strs[i].b=1; 16 strs[i].c=2; 17 } 18 return 0; 19 } 20 21 void main() 22 { 23 function(1,2); 24 }
反汇编如下:
1 #include "stdio.h" 2 3 typedef struct //三个整形变量共占用了12字节的空间,转成16进制为0xc; 4 { 5 6 int a; 7 int b; 8 int c; 9 10 }mystruct; 11 12 int function(int a,int b) 13 {
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,
1 unsigned char *buffer[100]; 2 mystruct *strs=(mystruct*)buffer
001A354E lea eax,[buffer]
001A3554 mov dword ptr [strs],eax
1 int i; 2 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地址处,否则执行下面语句
1 { 2 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
1 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
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地址处
1 return 0;
001A35C4 xor eax,eax
}
作者:比方
出处:http://www.cnblogs.com/Hailunchina/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如果文中有什么错误,欢迎指出。以免更多的人被误导。