zoukankan      html  css  js  c++  java
  • 1分钟左右随机生成2000万行随机字符串

    #include<windows.h>
    #pragma comment(linker,"/entry:Test")
    #include <stdlib.h>

    char * str="012345aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ567890";
    char * szPath = "z:\Test.txt";
    char * szFormat = "总共用时:%d ";


    __declspec(naked) void Test()
    {

    __asm
    {
    push ebp
    mov ebp,esp
    sub esp,0x10

    ;将进程级别提高到最高
    push REALTIME_PRIORITY_CLASS
    push 0xFFFFFFFF
    call dword ptr[SetPriorityClass]

    ;将线程优先级提到最高
    push THREAD_PRIORITY_TIME_CRITICAL
    call dword ptr[GetCurrentThread]
    push eax
    call dword ptr [SetThreadPriority]

    ;设置随机种子
    call dword ptr[GetTickCount]
    mov [ebp-0xC],eax
    push eax
    call dword ptr[srand]


    ;创建文件
    push NULL
    push FILE_ATTRIBUTE_NORMAL
    push OPEN_ALWAYS
    push NULL
    push FILE_SHARE_WRITE|FILE_SHARE_READ
    push GENERIC_WRITE|GENERIC_READ
    push dword ptr[szPath]
    call dword ptr[CreateFileA]

    ;保存HANDLE
    mov [ebp-4],eax

    ;内存文件映射 懒了 不做返回值判断了..
    push NULL
    push 0x15752A00 ;18 * 20000000 = 360000000 = 0x15752A00
    push NULL
    push PAGE_READWRITE
    push NULL
    push [ebp-4]
    call dword ptr[CreateFileMappingA]
    ;保存HANDLE
    mov [ebp-8],eax


    push 0x15752A00
    push 0
    push 0
    push FILE_MAP_WRITE
    push [ebp-8]
    call dword ptr[MapViewOfFile]
    ;保存内存地址
    mov [ebp-0x10],eax
    mov esi,eax


    mov ebx,0x1312D00
    mov edi,dword ptr[str]
    B:
    dec ebx
    cmp ebx,0
    je EXIT

    mov edx,0
    A:
    call dword ptr[rand]
    ;rand 返回最大值为0x7FFF 二进制为:111 111111 111111
    and eax,0x7FFF
    push eax

    ;截取后0-6位
    and eax,0x3F
    mov eax,[edi+eax]
    mov byte ptr [esi], al
    inc esi

    ;截取6-12位
    mov eax,[esp]
    shr eax,6
    and eax,0x3F
    mov eax,[edi+eax]
    mov byte ptr [esi], al
    inc esi

    ;截取3-9位
    mov eax,[esp]
    shr eax,3
    and eax,0x3F
    mov eax,[edi+eax]
    mov byte ptr [esi], al
    inc esi

    ;截取9-15位
    mov eax,[esp]
    shr eax,9
    and eax,0x3F
    mov eax,[edi+eax]
    mov byte ptr [esi], al
    inc esi
    add esp,4

    inc edx
    cmp edx,4
    jne A

    ;换行
    mov byte ptr [esi], 0xD
    inc esi
    mov byte ptr [esi],0xA
    inc esi

    jmp B
    EXIT:

    call dword ptr [GetTickCount]
    sub eax,[ebp-0xC]
    push eax
    push dword ptr [szFormat]
    call dword ptr [printf]

    push [ebp-0x10]
    push 0x15752A00
    call dword ptr [FlushViewOfFile]

    mov esp,ebp
    pop ebp
    ret
    }
    }

    VC6 新建CONSOLE程序
    选择hello world模板
    粘贴以上代码
    工程->设置
    照图设置

     



    最后编译的时候,记得选择Release方式

     



  • 相关阅读:
    Android Volley入门到精通:定制自己的Request
    Android高效加载大图、多图解决方案,有效避免程序OOM
    Android Volley入门到精通:使用Volley加载网络图片
    Android Volley入门到精通:初识Volley的基本用法
    彻底理解ThreadLocal
    Android中Parcelable接口用法
    Handler详解系列(四)——利用Handler在主线程与子线程之间互发消息,handler详解
    Storm流处理项目案例
    021 使用join()将数组转变为字符串
    020 $.each的使用
  • 原文地址:https://www.cnblogs.com/foohack/p/3582207.html
Copyright © 2011-2022 走看看