首页
社区
课程
招聘
[原创]常见指针和数组的反汇编(x86)
发表于: 2018-1-28 18:33 6621

[原创]常见指针和数组的反汇编(x86)

2018-1-28 18:33
6621

我学习逆向,整理的VC6编译出来指针和数组一些常见的反汇编笔记。由于我是新手,肯定有一些疏漏不完善的,我遇到了会实时更新的。

更新时间:2018年1月29日

指针

一级指针定义
5:        int n = 2;
0040D428   mov         dword ptr [ebp-4],2
6:        int *p1 = &n;
0040102F   lea         eax,[ebp-4]
00401032   mov         dword ptr [ebp-8],eax
二级指针定义
7:        int **p2 = &p1;
00401035   lea         ecx,[ebp-8]
00401038   mov         dword ptr [ebp-0Ch],ecx
使用一级指针给变量赋值
8:        *p1 = 5;
0040103B   mov         edx,dword ptr [ebp-8]
0040103E   mov         dword ptr [edx],5
使用二级指针给变量赋值
9:        **p2 = 3;
00401044   mov         eax,dword ptr [ebp-0Ch]
00401047   mov         ecx,dword ptr [eax]
00401049   mov         dword ptr [ecx],3
使用一级指针读取变量的值
12:       temp = *p1;
0040D44F   mov         edx,dword ptr [ebp-0Ch]
0040D452   mov         eax,dword ptr [edx]
0040D454   mov         dword ptr [ebp-8],eax
使用二级指针给读取变量的值
13:       temp = **p2;
0040D457   mov         ecx,dword ptr [ebp-10h]
0040D45A   mov         edx,dword ptr [ecx]
0040D45C   mov         eax,dword ptr [edx]
0040D45E   mov         dword ptr [ebp-8],eax

数组

数组的定义和赋值
5:        int intArr[] = {0, 1, 2, 3, 4};
0040D428   mov         dword ptr [ebp-14h],0    # intArr[0]
0040D42F   mov         dword ptr [ebp-10h],1    # intArr[1]
0040D436   mov         dword ptr [ebp-0Ch],2    # intArr[2]
0040D43D   mov         dword ptr [ebp-8],3        # intArr[3]
0040D444   mov         dword ptr [ebp-4],4        # intArr[4]
数组里的元素赋值
9:        intArr[1] = 2;
0040D451   mov         dword ptr [ebp-10h],2
数组里的元素取值
10:       temp = intArr[3];
0040D458   mov         ecx,dword ptr [ebp-8]
0040D45B   mov         dword ptr [ebp-18h],ecx
数组元素自增
16:       intArr[2]++;
0040D471   mov         ecx,dword ptr [ebp-18h]
0040D474   add         ecx,1
0040D477   mov         dword ptr [ebp-18h],ecx
数组里的元素赋值(动态)
19:       temp = intArr[n];
0040D47E   mov         edx,dword ptr [ebp-4]
0040D481   mov         eax,dword ptr [ebp+edx*4-20h]
0040D485   mov         dword ptr [ebp-24h],eax
数组里的元素赋值(动态)
20:       intArr[n] = 10;
0040D488   mov         ecx,dword ptr [ebp-4]            # ecx = n
0040D48B   mov         dword ptr [ebp+ecx*4-20h],0Ah

指针与数组之间的关系

使用数组给指针初始化
7:        int *pInt = intArr;
0040D44B   lea         eax,[ebp-14h]
0040D44E   mov         dword ptr [ebp-1Ch],eax
指针自增
18:       pInt++;
0040D47A   mov         edx,dword ptr [ebp-28h]
0040D47D   add         edx,4                    # 指针的加减法 = 加减数 * sizeof(指向的类型)
0040D480   mov         dword ptr [ebp-28h],edx
指针用数组的方式给元素赋值
27:       pInt[1] = temp;
0040D4B4   mov         eax,dword ptr [ebp-28h]  # pInt的地址
0040D4B7   mov         ecx,dword ptr [ebp-24h]
0040D4BA   mov         dword ptr [eax+4],ecx    # pInt的地址 + 4
指针用数组的方式给元素取值
28:       temp = pInt[2];
0040D4BD   mov         edx,dword ptr [ebp-28h]  # pInt的地址
0040D4C0   mov         eax,dword ptr [edx+8]    # pInt的地址 + 8
0040D4C3   mov         dword ptr [ebp-24h],eax
指针用数组的方式给元素赋值(动态)
30:       pInt[n] = temp;
0040D4C6   mov         ecx,dword ptr [ebp-4]    # n
0040D4C9   mov         edx,dword ptr [ebp-28h]  # pInt的地址
0040D4CC   mov         eax,dword ptr [ebp-24h]
0040D4CF   mov         dword ptr [edx+ecx*4],eax # pInt的地址 + n*4
指针用数组的方式给元素取值(动态)
31:       temp = pInt[n];
0040D4D2   mov         ecx,dword ptr [ebp-4]    # n
0040D4D5   mov         edx,dword ptr [ebp-28h]
0040D4D8   mov         eax,dword ptr [edx+ecx*4]
0040D4DB   mov         dword ptr [ebp-24h],eax  # pInt的地址 + n*4

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 22
活跃值: (443)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mark!
2018-1-29 07:11
0
雪    币: 7415
活跃值: (1514)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
期待持续更新哈
2018-4-6 08:13
0
游客
登录 | 注册 方可回帖
返回
//