首页
社区
课程
招聘
[旧帖] [原创]关于取模运算的一点小发现 0.00雪花
发表于: 2007-12-30 10:01 4475

[旧帖] [原创]关于取模运算的一点小发现 0.00雪花

2007-12-30 10:01
4475
本人菜鸟一只,早上按惯例阅读反汇编代码进行晨练,测试环境是VC++6.0,测试到取模运算时发现了一个很有趣的现象,当余数为1或者2的时候(0没有意义)取余运算的反汇编代码如下

00401058   mov         edx,dword ptr [ebp-4]
0040105B   add         edx,dword ptr [ebp-8]
0040105E   and         edx,80000001h
00401064   jns         main+5Bh (0040106b)
00401066   dec         edx
00401067   or          edx,0FEh
0040106A   inc         edx
0040106B   test        edx,edx
0040106D   jne         main+78h (00401088)

当大于2的时候如下:
00401058   mov         eax,dword ptr [ebp-4]
0040105B   add         eax,dword ptr [ebp-8]
0040105E   cdq
0040105F   mov         ecx,5
00401064   idiv        eax,ecx
00401066   test        edx,edx
00401068   jne         main+73h (00401083)

测试原代码如下:
#include "stdio.h"
main()
{
    int i,j;
    for(i=0;i<8;i++)
    {
       for(j=0;j<8;j++)
       if((i+j)%1==0)
       printf("%c%c",219,219);
     else
       printf(" ");
       printf("\n");
    }
}
是不是很有意思啊,希望对刚入门的同学在阅读代码时有帮助,另外请教各位高人,第一段反汇编的代码我也不理解,是不是编译器优化后的代码啊,也请高人解释一下。

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//