反汇编逆向实例_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
}
相关文章推荐
- 反汇编逆向实例_dowhile语句反汇编
- 反汇编逆向实例_ifelse语句反汇编
- 反汇编逆向实例_swirch case语句反汇编
- 反汇编逆向实例_while语句反汇编
- 反汇编逆向实例_struct 语句反汇编
- 反汇编逆向实例_For语句反汇编
- 170522 逆向-控制语句的汇编和优化
- [iOS逆向工程] 在汇编语言调试中获取当前实例句柄
- 逆向知识第八讲,if语句在汇编中表达的方式
- SQL语句学习手册实例版
- sql查询语句,求每个分组中的最大值实例
- 关于给汇编生成的程序添加暂停语句
- Powerbuilder中常用SQL语句实例
- U-boot-1.1.6-2008R1到vdsp5(bf561)的移植记录(3): 汇编空语句
- 常用SQL语句实例
- HQL语句(结合实例)
- CREATE TABLE AS语句与循环游标的使用实例
- SQL语句学习手册实例版
- SQL语句实现跨Sql server数据库操作实例 - 查询远程SQL,本地SQL数据库与远程SQL的数据传递
- WINDOWS的钩子函数知识与汇编实例