• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >汇编语言 > 汇编修改文件操作

汇编修改文件操作

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了汇编语言文件操作,汇编文件操作,管理文件汇编,文件汇编,营改增文件汇编等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>

想一想,如果你要写一个加密程序,或者病毒程序,都需要对文件进行修改(写操作)。在dos下,系统提供有相应的功能调用来完成这样的操作,如:“打开文件\移动指针\读文件\写文件\关闭文件”,在windows下,系统也提供有相应的Api函数。如“CreateFile\SetFilePointer\ReadFile\WriteFile\SetEndOfFile\CloseHandle”等,利用这些编程和dos下没什么两样,这里就不再多说啦!咱们今天要用的是利用“内存映射文件”来操作。简单的说就是把文件内容映射到一个内存块,改变这块内存的内容就是改变文件的内容,系统可提供的这块内存巨大、平坦,操作起来真是方便!

  这种方法要用到“CreateFile/CreatFileMapping/MapViewOfFile/UnmapViewOfFile/CloseHandle”,具体使用参考“Win32 Developer's References”。俺也是刚看,不敢乱说,嘿嘿嘿。

--------------------------------------------------------------
;例:打开一个已存在的文件并修改,建议文件具有一定的大小,比如80H字节。
;文件名:12.asm

.386
.Model Flat, StdCall
Option Casemap :None
;---------------------------------------------------------
Include  windows.inc
Include  kernel32.inc
IncludeLib kernel32.lib
ModifyFile PROTO :LPSTR
      .data
MyFile   db 'd:\masm7\MyTest',0   ;文件MyTest必须存在,若不存在,程序将什么也不做
M1     db 'Good morning',0     ;将写到文件中的字符串
M2     db 'Good afternoon',0
M3     db 'Good evening',0
;---------------------------------------------------------
      .data?
hFile   dd ?
hMap    dd ?
pMapAddr  dd ?
;---------------------------------------------------------
     .code
START:
  invoke CreateFile, \         ;打开文件,该函数具有多种功能
  ADDR MyFile,\             ;指向要打开的文件名字符串
  GENERIC_READ or GENERIC_WRITE ,\   ;打开的文件具有读写的权限
  FILE_SHARE_READ or FILE_SHARE_WRITE,\ ;别人也可读写此文件
  NULL, \                ;95下不用
  OPEN_EXISTING, \           ;要打开的文件必须存在
  FILE_ATTRIBUTE_NORMAL,\        ;文件的属性
  NULL                 ;95下必须是NULL
  .if eax!=INVALID_HANDLE_VALUE     ;判断文件是否已正常打开
    mov hFile, eax            ;保存文件句柄
    invoke CreateFileMapping, \ ;creates file-mapping object for the specified file.
    hFile, \           ;Identifies the file from which to create a mapping object
    NULL, \           ;ignored
    PAGE_READWRITE, \      ;access
    0, \             ;high-order 32 bits of the maximum size
    0, \             ;low-order 32 bits of the maximum size
    NULL             ;the mapping object is created without a name
    .if eax!=NULL        ;
      mov hMap,eax       ;the return value is a handle to the file-mapping object
      invoke MapViewOfFile,hMap,FILE_MAP_WRITE,0,0,NULL ;映射文件到内存
      .if eax!=NULL
        mov pMapAddr,eax         ;保存返回的内存块首地址
        invoke ModifyFile,pMapAddr    ;修改内存块内容
        invoke UnmapViewOfFile,pMapAddr ;解除文件映射
      .endif
      invoke CloseHandle,hMap    ;关闭内存映射文件
    .endif
    invoke CloseHandle, hFile     ;关闭文件
  .endif
  invoke ExitProcess,0          ;结束程序

;修改内存块的内容,就相当于修改文件的内容
ModifyFileproc uses ebx esi edi,lpBufferAddress:LPSTR
  mov edi,lpBufferAddress   ;取内存块地址
  invoke lstrcpy,edi,addr M1  ;修改内存块内容
  add edi,40h         ;调整地址(随意)
  invoke lstrcpy,edi,addr M2  ;修改
  add edi,240h
  invoke lstrcpy,edi,addr M3
  ret
ModifyFileendp
  END START
----------------------------------------------------------------------
注意:

0、程序运行后无任何提示,只可从被修改的文件上看变化
1、第39、40行的值都是0,这样,内存映射文件的大小就正好取文件的实际大小
2、可以看到,第62、63行的修改并没起作用,因为文件没有这样大。
3、将40行的数据改为100H,可看到运行后原文件的大小将变为100H
4、将40行的数据改为200H,47行的指令屏蔽掉不执行,程序运行后可看到文件的大小将成200H
5、此时将40行的数据改为80H,运行程序,文件不会变小
6、恢复47行指令,运行后文件亦不能减小
7、真想减少文件尺寸,可在52行前多执行两条指令:①SetFilePointer②SetEndOfFile
8、其他的没测试,自己琢磨吧!

</div> </div> </div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 汇编修改文件操作

相关文章

  • 2017-06-28汇编语言的艺术-观念正误(一)
  • 2017-06-28MASM-两个16位二进制数减法模拟
  • 2017-06-178086指令系统
  • 2017-06-178086的寻址方式
  • 2017-06-28用程序修改PE使其可显示一个消息框
  • 2017-06-28汇编教程之“绘制”文本串
  • 2017-06-28汇编语言套装软件制作(2)
  • 2017-06-28汇编源码系列之cleanf
  • 2017-06-28汇编教程之以对话框为主要界面的应用程序
  • 2017-06-28汇编中使用打开对话框

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 汇编源码系列之calc
    • 显示I/O
    • 汇编教程:控制转移
    • 汇编源码系列之getsect
    • 汇编源码系列之free
    • 汇编教程:多文档界面(MDI)
    • CIH V1.5版本病毒源码
    • 详解驻留exe文件
    • 工具提示控件介绍
    • 汇编源代码之一个旋转的3D箱子(动画)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有