首页
社区
课程
招聘
[原创]小逆了一下 "xlsdg的把100000000以内所有素数全部计算"
发表于: 2007-8-31 16:14 4289

[原创]小逆了一下 "xlsdg的把100000000以内所有素数全部计算"

2007-8-31 16:14
4289
小菜我对金山的考题望而却步啊,,,小逆一个程序缓解一下
【 程序下载地址:http://xlsdg.ys168.com 】File: PRIMES.EXE(不能上传就用作者提供的地址把)
Size: 6597 bytes
Version: 3.00
MD5: 29CDCFF6FE733F2B492DB39E18DFD550
SHA1: C323D32FA48BBC67AA53E6D1289495BED31364C8
CRC32: 9827143B
用RLPack V1.18 (LZMA 4.30) -> ap0x加壳,很简单的壳,用ESP定律就解决了,OEP 004011F0 用LOADPE完全脱壳,用Import REConstructor修复....Microsoft Visual Basic 5.0 / 6.0编写,运行后发现他会保存文件在__vbaFileOpen下断,断到,主要说一下他用的算法,他算素数的算法就是用的"用筛法" 就是先建立一个很大的数组来保存0/1散列,0代表的是素数,1代表的不是素数,通过"从自然数中(1除外)选一个最小的数,你可以大胆宣布它是素数,然后把剩下的所有自然数中是它的倍数的数全部去掉(筛去),接下来从剩下的数中再选一个最小的数重复上面的工作,这样就能求得所有的素数。"的方法来筛选00401964       .    D95D E8         FSTP      DWORD PTR SS:[EBP-18]
00401967       .    8B3D 20304000 MOV       EDI, DWORD PTR DS:[403020]                  ;    01200020開始存储01 散列
0040196D       .    B9 03000000     MOV       ECX, 3                                                           ;从3开始因为素数出了2外都是奇数所以从3开始最后把2加上
00401972       .    894D E4         MOV       DWORD PTR SS:[EBP-1C], ECX
00401975       >    B8 10270000     MOV       EAX, 2710                                                    ; 当筛选素数值超过10000则将100000000内的所有非素数筛选完
0040197A       .    66:3BC8         CMP       CX, AX
0040197D       .    7F 41           JG        SHORT dumped_.004019C0
0040197F       .    0FBFF1          MOVSX     ESI, CX
00401982       .    385C3E FD       CMP       BYTE PTR DS:[ESI+EDI-3], BL                      ;检查要写入该位的数组是不是已经被筛选掉了,为1跳
00401986       .    75 2C           JNZ       SHORT dumped_.004019B4
00401988       .    B8 00E1F505     MOV       EAX, 5F5E100                                             ;100000000
0040198D       .    99              CDQ
0040198E       .    F7FE            IDIV      ESI                                                                      ;100000000除以筛选素数的商,作为筛选的范围
00401990       .    8BD6            MOV       EDX, ESI
00401992       >    3BD0            CMP       EDX, EAX                                                        00401994       .    7F 1B           JG        SHORT dumped_.004019B1
00401996       .    8BCE            MOV       ECX, ESI
00401998       .    0FAFCA          IMUL      ECX, EDX                                               ;把素数所有的倍数全部筛出去
0040199B       .    385C39 FD       CMP       BYTE PTR DS:[ECX+EDI-3], BL
0040199F       .    8D4C39 FD       LEA       ECX, DWORD PTR DS:[ECX+EDI-3]
004019A3       .    75 03           JNZ       SHORT dumped_.004019A8
004019A5       .    C601 01         MOV       BYTE PTR DS:[ECX], 1
004019A8       >    B9 02000000     MOV       ECX, 2                                                       ;加2    只检测奇数
004019AD       .    03D1            ADD       EDX, ECX
004019AF       .^ EB E1           JMP       SHORT dumped_.00401992
004019B1       >    8B4D E4         MOV       ECX, DWORD PTR SS:[EBP-1C]
004019B4       >    B8 02000000     MOV       EAX, 2
004019B9       .    03C8            ADD       ECX, EAX                                                       ;加2
004019BB       .    894D E4         MOV       DWORD PTR SS:[EBP-1C], ECX
004019BE       .^ EB B5           JMP       SHORT dumped_.00401975unsigned char bitmap[100000000]={0};for (int i = 3;i <= 10000; i+=2)
     {
            if (bitmap[i])
            {
                 continue;
            }
            else
           {
     
                int tmp = 100000000 / i;
               for (int j = 3;j <= tmp; j+=2)
              {
                  bitmap[j * i] = 1;   
              }
          }
   
     }00401C06       .    D95D E0         FSTP      DWORD PTR SS:[EBP-20]
00401C09       .    8B35 98104000 MOV       ESI, DWORD PTR DS:[<&msvbvm60.__vbaStrMov>;    msvbvm60.__vbaStrMove
00401C0F       .    B9 03000000     MOV       ECX, 3                                             ;      大循环从3开始
00401C14       .    894D EC         MOV       DWORD PTR SS:[EBP-14], ECX
00401C17       >    B8 00E1F505     MOV       EAX, 5F5E100                                ;    100000000
00401C1C       .    3BC8            CMP       ECX, EAX
00401C1E       .    0F8F 62010000 JG        dumped_.00401D86
00401C24       .    A1 20304000     MOV       EAX, DWORD PTR DS:[403020]
00401C29       .    385C08 FD       CMP       BYTE PTR DS:[EAX+ECX-3], BL       ;检测标记位是不是1是1跳过
00401C2D       .    0F85 41010000 JNZ       dumped_.00401D74
00401C33       .    8B55 E8         MOV       EDX, DWORD PTR SS:[EBP-18]
00401C36       .    52              PUSH      EDX
00401C37       .    8D85 60FFFFFF LEA       EAX, DWORD PTR SS:[EBP-A0]
00401C3D       .    8D4D EC         LEA       ECX, DWORD PTR SS:[EBP-14]
00401C40       .    50              PUSH      EAX
00401C41       .    47              INC       EDI
00401C42       .    898D 68FFFFFF MOV       DWORD PTR SS:[EBP-98], ECX
00401C48       .    C785 60FFFFFF>MOV       DWORD PTR SS:[EBP-A0], 4003
00401C52       .    FF15 64104000 CALL      DWORD PTR DS:[<&msvbvm60.rtcStrFromVar>]    ;    msvbvm60.rtcStrFromVar
00401C58       .    8BD0            MOV       EDX, EAX
00401C5A       .    8D4D DC         LEA       ECX, DWORD PTR SS:[EBP-24]
00401C5D       .    FFD6            CALL      ESI
00401C5F       .    50              PUSH      EAX
00401C60       .    FF15 1C104000 CALL      DWORD PTR DS:[<&msvbvm60.__vbaStrCat>]      ;    msvbvm60.__vbaStrCat
00401C66       .    8BD0            MOV       EDX, EAX
00401C68       .    8D4D E8         LEA       ECX, DWORD PTR SS:[EBP-18]
00401C6B       .    FFD6            CALL      ESI
00401C6D       .    8D4D DC         LEA       ECX, DWORD PTR SS:[EBP-24]
00401C70       .    FF15 AC104000 CALL      DWORD PTR DS:[<&msvbvm60.__vbaFreeStr>]     ;    msvbvm60.__vbaFreeStr
00401C76       .    66:81FF 2B02    CMP       DI, 22B                                                           ;素数个数为555写一次文件
00401C7B       .    0F85 F3000000 JNZ       dumped_.00401D74
00401C81       .    391D E4324000 CMP       DWORD PTR DS:[4032E4], EBX
00401C87       .    75 10           JNZ       SHORT dumped_.00401C99
00401C89       .    68 E4324000     PUSH      dumped_.004032E4
00401C8E       .    68 E4164000     PUSH      dumped_.004016E4
00401C93       .    FF15 70104000 CALL      DWORD PTR DS:[<&msvbvm60.__vbaNew2>]        ;    msvbvm60.__vbaNew2
00401C99       >    8B3D E4324000 MOV       EDI, DWORD PTR DS:[4032E4]
00401C9F       .    8B0F            MOV       ECX, DWORD PTR DS:[EDI]
00401CA1       .    8D55 D0         LEA       EDX, DWORD PTR SS:[EBP-30]
00401CA4       .    52              PUSH      EDX
00401CA5       .    57              PUSH      EDI
00401CA6       .    FF51 14         CALL      DWORD PTR DS:[ECX+14]
00401CA9       .    DBE2            FCLEX
00401CAB       .    3BC3            CMP       EAX, EBX
00401CAD       .    7D 0F           JGE       SHORT dumped_.00401CBE
00401CAF       .    6A 14           PUSH      14
00401CB1       .    68 D4164000     PUSH      dumped_.004016D4
00401CB6       .    57              PUSH      EDI
00401CB7       .    50              PUSH      EAX
00401CB8       .    FF15 20104000 CALL      DWORD PTR DS:[<&msvbvm60.__vbaHresultChec>;    msvbvm60.__vbaHresultCheckObj
00401CBE       >    8B45 D0         MOV       EAX, DWORD PTR SS:[EBP-30]                  ;    msvbvm60.6A29A7C4
00401CC1       .    8B08            MOV       ECX, DWORD PTR DS:[EAX]
00401CC3       .    8D55 DC         LEA       EDX, DWORD PTR SS:[EBP-24]
00401CC6       .    52              PUSH      EDX
00401CC7       .    50              PUSH      EAX
00401CC8       .    8BF8            MOV       EDI, EAX
00401CCA       .    FF51 50         CALL      DWORD PTR DS:[ECX+50]
00401CCD       .    DBE2            FCLEX
00401CCF       .    3BC3            CMP       EAX, EBX
00401CD1       .    7D 0F           JGE       SHORT dumped_.00401CE2
00401CD3       .    6A 50           PUSH      50
00401CD5       .    68 F4164000     PUSH      dumped_.004016F4
00401CDA       .    57              PUSH      EDI
00401CDB       .    50              PUSH      EAX
00401CDC       .    FF15 20104000 CALL      DWORD PTR DS:[<&msvbvm60.__vbaHresultChec>;    msvbvm60.__vbaHresultCheckObj
00401CE2       >    8B45 DC         MOV       EAX, DWORD PTR SS:[EBP-24]
00401CE5       .    50              PUSH      EAX
00401CE6       .    68 08174000     PUSH      dumped_.00401708                            ;    UNICODE "\\PRIMES.TXT"
00401CEB       .    FF15 1C104000 CALL      DWORD PTR DS:[<&msvbvm60.__vbaStrCat>]      ;    msvbvm60.__vbaStrCat
00401CF1       .    8BD0            MOV       EDX, EAX
00401CF3       .    8D4D D8         LEA       ECX, DWORD PTR SS:[EBP-28]
00401CF6       .    FFD6            CALL      ESI
00401CF8       .    50              PUSH      EAX
00401CF9       .    6A 01           PUSH      1
00401CFB       .    6A FF           PUSH      -1
00401CFD       .    6A 08           PUSH      8
00401CFF       .    FF15 6C104000 CALL      DWORD PTR DS:[<&msvbvm60.__vbaFileOpen>]    ;    msvbvm60.__vbaFileOpen
00401D05       .    8B3D 80104000 MOV       EDI, DWORD PTR DS:[<&msvbvm60.__vbaFreeSt>;    msvbvm60.__vbaFreeStrList
00401D0B       .    8D4D D8         LEA       ECX, DWORD PTR SS:[EBP-28]
00401D0E       .    51              PUSH      ECX
00401D0F       .    8D55 DC         LEA       EDX, DWORD PTR SS:[EBP-24]
00401D12       .    52              PUSH      EDX
00401D13       .    6A 02           PUSH      2
00401D15       .    FFD7            CALL      EDI                                         ;    <&msvbvm60.__vbaFreeStrList>
00401D17       .    83C4 0C         ADD       ESP, 0C
00401D1A       .    8D4D D0         LEA       ECX, DWORD PTR SS:[EBP-30]
00401D1D       .    FF15 B0104000 CALL      DWORD PTR DS:[<&msvbvm60.__vbaFreeObj>]     ;    msvbvm60.__vbaFreeObj
00401D23       .    8B45 E8         MOV       EAX, DWORD PTR SS:[EBP-18]
00401D26       .    50              PUSH      EAX
00401D27       .    FF15 18104000 CALL      DWORD PTR DS:[<&msvbvm60.rtcTrimBstr>]      ;    msvbvm60.rtcTrimBstr
00401D2D       .    8BD0            MOV       EDX, EAX
00401D2F       .    8D4D D8         LEA       ECX, DWORD PTR SS:[EBP-28]
00401D32       .    FFD6            CALL      ESI
00401D34       .    8B55 D8         MOV       EDX, DWORD PTR SS:[EBP-28]
00401D37       .    8D4D DC         LEA       ECX, DWORD PTR SS:[EBP-24]
00401D3A       .    895D D8         MOV       DWORD PTR SS:[EBP-28], EBX
00401D3D       .    FFD6            CALL      ESI
00401D3F       .    50              PUSH      EAX
00401D40       .    6A 01           PUSH      1
00401D42       .    68 24174000     PUSH      dumped_.00401724
00401D47       .    FF15 50104000 CALL      DWORD PTR DS:[<&msvbvm60.__vbaPrintFile>] ;    msvbvm60.__vbaPrintFile
00401D4D       .    8D4D D8         LEA       ECX, DWORD PTR SS:[EBP-28]
00401D50       .    51              PUSH      ECX
00401D51       .    8D55 DC         LEA       EDX, DWORD PTR SS:[EBP-24]
00401D54       .    52              PUSH      EDX
00401D55       .    6A 02           PUSH      2
00401D57       .    FFD7            CALL      EDI                                         ;    <&msvbvm60.__vbaFreeStrList>
00401D59       .    83C4 18         ADD       ESP, 18
00401D5C       .    6A 01           PUSH      1
00401D5E       .    FF15 40104000 CALL      DWORD PTR DS:[<&msvbvm60.__vbaFileClose>] ;    msvbvm60.__vbaFileClose
00401D64       .    BA 2C174000     MOV       EDX, dumped_.0040172C
00401D69       .    8D4D E8         LEA       ECX, DWORD PTR SS:[EBP-18]
00401D6C       .    33FF            XOR       EDI, EDI
00401D6E       .    FF15 7C104000 CALL      DWORD PTR DS:[<&msvbvm60.__vbaStrCopy>]     ;    msvbvm60.__vbaStrCopy
00401D74       >    8B4D EC         MOV       ECX, DWORD PTR SS:[EBP-14]                  ;    msvbvm60.6A29A7C4
00401D77       .    B8 02000000     MOV       EAX, 2
00401D7C       .    03C8            ADD       ECX, EAX                                                     ;    加2
00401D7E       .    894D EC         MOV       DWORD PTR SS:[EBP-14], ECX
00401D81       .^ E9 91FEFFFF     JMP       dumped_.00401C17写文件的原码就不写了
http://hi.baidu.com/xdct/blog/item/366f5e81126beedabd3e1e51.html

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

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