可将内存碎片化的程序(win32 asm)

    技术2022-05-11  135

    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; Fragment.asm; 重复分配和释放固定内存块使内存碎片化; Windows NT 下使用。;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; 使用 nmake 或下列命令进行编译和链接:; ml /c /coff Fragment.asm; rc Fragment.rc; Link /subsystem:windows Fragment.obj Fragment.res;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  .386  .model flat, stdcall  option casemap :none;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; Include 文件定义;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>include  windows.incinclude  user32.incincludelib user32.libinclude  kernel32.incincludelib kernel32.lib;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; Equ 等值定义;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ICO_MAIN equ 1000DLG_MAIN equ 100IDC_MEMORY equ  101IDC_COUNT equ  102IDC_INFO equ 103;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; 数据段;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  .data?

    hInstance dd ?hWinMain dd ?dwTotalMemory dd ?dwCount  dd ?ifCanQuit dd ?

      .constszInfo  db '无法继续申请 1MB 大小的内存!',0;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; 代码段;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  .code;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>_ProcThread proc uses ebx ecx edx esi edi,lParam  local @lpLastMem

      invoke GlobalAlloc,GPTR,1000000  mov @lpLastMem,eax  inc dwCount  add dwTotalMemory,1000000  .repeat   push @lpLastMem   invoke GlobalAlloc,GPTR,1000000   mov @lpLastMem,eax   .if eax    add dwTotalMemory,1000000    inc dwCount   .endif   pop eax   invoke GlobalReAlloc,eax,100,GMEM_ZEROINIT   sub dwTotalMemory,1000000 - 100   invoke SetDlgItemInt,hWinMain,IDC_MEMORY,dwTotalMemory,FALSE   invoke SetDlgItemInt,hWinMain,IDC_COUNT,dwCount,FALSE  .until ! @lpLastMem  invoke SetDlgItemText,hWinMain,IDC_INFO,addr szInfo  mov ifCanQuit,1  ret

    _ProcThread endp;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam  local @dwTemp

      mov eax,wMsg  .if eax == WM_CLOSE   .if ifCanQuit    invoke EndDialog,hWnd,NULL   .endif;********************************************************************  .elseif eax == WM_INITDIALOG   push hWnd   pop hWinMain   invoke LoadIcon,hInstance,ICO_MAIN   invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax   invoke CreateThread,NULL,0,offset _ProcThread,NULL,/    NULL,addr @dwTemp   invoke CloseHandle,eax;********************************************************************  .else   mov eax,FALSE   ret  .endif  mov eax,TRUE  ret

    _ProcDlgMain endp;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>start:  invoke GetModuleHandle,NULL  mov hInstance,eax  invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL  invoke ExitProcess,NULL;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  end start


    最新回复(0)