win32汇编之内存映射文件之间的数据传递

来源:互联网 发布:浙江师范行知学院官网 编辑:程序博客网 时间:2024/06/06 04:58
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; win32汇编 内存映射文件之间的数据传递; by power_virus 2014.12.17 23:00; 参考资料:Windows环境下32位汇编语言程序设计;Windows核心编程;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; Control.asm;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; ml /c /coff Control.asm; rc Control.rc; Link /subsystem:windows Control.obj Control.res;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.386.model flat, stdcalloption casemap :none;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; Include 文件;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>includewindows.incincludeuser32.incincludelibuser32.libincludekernel32.incincludelibkernel32.libincludegdi32.incincludelibgdi32.libincludeComdlg32.incincludelibComdlg32.lib;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; Equ ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ICO_MAINequ 4101HDLG_MAIN equ 4100HIDC_CZequ4000HIDC_MLequ 4002HIDC_WRITE equ 4003H;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.data?szFileNamedbMAX_PATH dup (?)hInstancedd?hWinMaindd  ?hFiledd?hDCdd?dwFileSizedd?hImageMemorydd ?pImageMemorydd ?dwReadedSizedd ?plStreamdd ?plPicturedd ?hmWidthdd ?hmHeightdd ?hMapFiledd ?lpMemory dd ?HWFiledd ?HWMapFiledd ?HWMemorydd ?lpWMemorydd ?lpMsgBuf dd ?.constszFilterdb'Text Files(*.txt)',0,'*.txt',0,'All Files(*.*)',0,'*.*',0,0szCaptiondb'control',0szWFileNamedb'D:\TEST.txt',0szErrodb 'erro',0szCFdb 'CreateFile失败',0szCMFdb 'CreateMappingFile失败',0szMVOFdb 'MapViewOfFile失败',0szGFSdb 'GetFileSize失败',0szOKdb '数据拷贝成功',0szThreadE db '创建线程失败',0;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; 代码段;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.code;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;写文件,线程函数;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>_WriteFileproc uses ebx esi edi ecx _lParaminvokeCreateFile,addr szWFileName,GENERIC_WRITE or GENERIC_READ,FILE_SHARE_WRITE,NULL,CREATE_NEW,FILE_ATTRIBUTE_ARCHIVE,NULL.if eax == INVALID_HANDLE_VALUEinvokeMessageBox,hWinMain,addr szCF,addr szCaption,MB_OKret.endifmov HWFile,eax;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;注:此处的PAGE_READWRITE属性和CreateFile函数中的GENERIC_WRITE or GENERIC_READ属性相对应;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>invokeCreateFileMapping,HWFile,NULL,PAGE_READWRITE,0,dwFileSize,NULL.if eax == NULLinvokeMessageBox,hWinMain,addr szCMF,addr szCaption,MB_OKjmp CF.endifmov HWMapFile,eaxinvokeMapViewOfFile,HWMapFile,FILE_MAP_WRITE,0,0,0.if eax == NULLinvokeMessageBox,hWinMain,addr szMVOF,addr szCaption,MB_OKjmp CMF.endifmov lpWMemory,eax;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;将映射文件1中的数据复制到映射文件2中;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>mov esi,lpMemorymov edi,lpWMemorymov ecx,dwFileSizecldrep movsbinvokeMessageBox,hWinMain,addr szOK,addr szCaption,MB_OK;invokeFlushViewOfFile,lpWMemory,dwFileSize;通知CPU立即将数据页中数据写入磁盘文件invoke UnmapViewOfFile,lpWMemoryinvoke UnmapViewOfFile,lpMemoryCMF:invoke CloseHandle,HWMapFileCF:invoke CloseHandle,HWFileret_WriteFileendp;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;打开文件;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>_OpenFileproclocal@stOF:OPENFILENAMEinvokeRtlZeroMemory,addr @stOF,sizeof @stOFmov@stOF.lStructSize,sizeof @stOFmov@stOF.lpstrFilter,offset szFiltermov@stOF.lpstrFile,offset szFileNamemov@stOF.nMaxFile,MAX_PATHmov@stOF.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXISTinvokeGetOpenFileName,addr @stOF.if!eaxret.endifinvokeSetDlgItemText,hWinMain,IDC_ML,addr szFileName;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;创建映射文件;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>invokeCreateFile,addr szFileName,GENERIC_READ,FILE_SHARE_READ or \FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,NULL.if eax == INVALID_HANDLE_VALUEinvokeMessageBox,hWinMain,addr szCF,addr szCaption,MB_OKret.endifmov hFile,eaxinvoke GetFileSize,eax,NULL.if eax == 0FFFFFFFFHinvokeMessageBox,hWinMain,addr szGFS,addr szCaption,MB_OKjmp CF.endifmov dwFileSize,eaxinvoke CreateFileMapping,hFile,NULL,PAGE_READONLY,0,0,NULL.if eax == NULLinvokeMessageBox,hWinMain,addr szCMF,addr szCaption,MB_OKjmp CF.endifmov hMapFile,eaxinvokeMapViewOfFile,hMapFile,FILE_MAP_COPY,0,0,0.if eax == NULLinvokeMessageBox,hWinMain,addr szMVOF,addr szCaption,MB_OKjmp CMF.endifmov lpMemory,eaxinvokeGetDlgItem,hWinMain,IDC_WRITEinvokeEnableWindow,eax,TRUECMF:invokeCloseHandle,hMapFileCF:invokeCloseHandle,hFileret _OpenFileendp;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>_ProcDlgMainprocuses ebx edi esi hWnd,wMsg,wParam,lParammoveax,wMsg.ifeax == WM_CLOSEinvokeEndDialog,hWnd,NULL.elseifeax == WM_COMMANDmoveax,wParam.ifax ==IDCANCELinvokeEndDialog,hWnd,NULL.elseif ax == IDC_CZinvoke_OpenFile.elseif ax == IDC_WRITEinvokeCreateThread,NULL,0,addr _WriteFile,NULL,NULL,NULL.if eax == NULLinvoke MessageBox,hWinMain,addr szThreadE,addr szCaption,MB_OKret.endif.endif.elseifeax ==WM_INITDIALOGpushhWndpophWinMaininvokeGetDlgItem,hWinMain,IDC_WRITEinvokeEnableWindow,eax,FALSE.elsemoveax,FALSEret.endifmoveax,TRUEret_ProcDlgMainendp;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>start:invokeGetModuleHandle,NULLmovhInstance,eaxinvokeDialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULLinvokeExitProcess,NULLendstart
<a target=_blank href="http://download.csdn.net/detail/power_virus/8271883">点击打开链接</a>

0 0
原创粉丝点击