首页
社区
课程
招聘
[旧帖] [求助]if后面的为什么会执行(c和汇编代码) 0.00雪花
发表于: 2015-7-2 19:36 1409

[旧帖] [求助]if后面的为什么会执行(c和汇编代码) 0.00雪花

2015-7-2 19:36
1409
#include "stdio.h"
2:
3:    void main()
4:    {
0040D420   push        ebp
0040D421   mov         ebp,esp
0040D423   sub         esp,48h
0040D426   push        ebx
0040D427   push        esi
0040D428   push        edi
0040D429   lea         edi,[ebp-48h]
0040D42C   mov         ecx,12h
0040D431   mov         eax,0CCCCCCCCh
0040D436   rep stos    dword ptr [edi]
5:        char****** p1;
6:        char****** p2;
7:        p1=(char******)3;
0040D438   mov         dword ptr [ebp-4],3
8:        p2=(char******)5;
0040D43F   mov         dword ptr [ebp-8],5
9:        if (p2-p1==0)
0040D446   mov         eax,dword ptr [ebp-8]
0040D449   sub         eax,dword ptr [ebp-4]
0040D44C   sar         eax,2         //这里将其置为0
0040D44F   test        eax,eax
0040D451   jne         main+4Eh (0040d46e)
10:       {
11:           p2=0;
0040D453   mov         dword ptr [ebp-8],0
12:           p1=0;
0040D45A   mov         dword ptr [ebp-4],0
13:           printf("aa");
0040D461   push        offset string "aa" (0042201c)
0040D466   call        printf (0040dc10)
0040D46B   add         esp,4
14:       }
15:       getch();
0040D46E   call        _getch (0040d590)
16:   }
0040D473   pop         edi
0040D474   pop         esi
0040D475   pop         ebx
0040D476   add         esp,48h
0040D479   cmp         ebp,esp
0040D47B   call        __chkesp (0040dbd0)
0040D480   mov         esp,ebp
0040D482   pop         ebp
0040D483   ret
为什么会执行?是指针类型的什么特性?
char****** p1;
char****** p2;
p1=(char******)3;
p2=(char******)5;
if (p2-p1==0)
{
p2=0;
p1=0;
}//c代码
知道的说下啊

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 10
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自己搞懂了,其实就是编译器是死的,两个指针相减结果是他们之间的距离,要除以4,由于强制类型转换,1/4 = 0,所以if通过
2015-7-4 10:12
0
游客
登录 | 注册 方可回帖
返回
//