反汇编逆向实例_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
}
相关文章推荐
- 反汇编逆向实例_dowhile语句反汇编
- 反汇编逆向实例_ifelse语句反汇编
- 反汇编逆向实例_swirch case语句反汇编
- 反汇编逆向实例_while语句反汇编
- 反汇编逆向实例_unoin语句反汇编
- 反汇编逆向实例_For语句反汇编
- 170522 逆向-控制语句的汇编和优化
- [iOS逆向工程] 在汇编语言调试中获取当前实例句柄
- 逆向知识第八讲,if语句在汇编中表达的方式
- Jack对分支循环语句伪指令反汇编前后的比较
- 关于给汇编生成的程序添加暂停语句
- .net托管环境下struct实例字段的内存布局(Layout)和大小(Size)
- VC实例分析:VC++通过汇编获取代码运行时间
- Powerbuilder中常用SQL语句实例
- CREATE TABLE AS语句与循环游标的使用实例
- .net托管环境下struct实例字段的内存布局(Layout)和大小(Size)
- HQL语句(结合实例)
- sql查询语句,求每个分组中的最大值实例
- javascript实例--循环判断查询表单,构建SQL语句
- 几个c++语句的汇编实现(H1指令)