加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

汇编 – 使用3Dh会导致中断仅返回“已拒绝访问”

发布时间:2020-12-14 02:51:36 所属栏目:Windows 来源:网络整理
导读:配置: MS-DOS 16 BIT (writing in a .asm file,then compiling them with TASM and TLINK) Windows 7 x64 我在Assembly中创建了一个简单的程序,它只应该打开一个文件并为其写一个文本. 这是代码: assume cs:code,ds:datadata segment fileName db "input.t
配置:

MS-DOS 16 BIT (writing in a .asm file,then compiling them with TASM and TLINK)

Windows 7 x64

我在Assembly中创建了一个简单的程序,它只应该打开一个文件并为其写一个文本.
这是代码:

assume cs:code,ds:data
data segment
    fileName db "input.txt",0 ; We assure it is an ASCIIZ(ero) file.
    toWrite db "Hello World!","$"
data ends

code segment
  writeToFile:
    ; pentru functia 3Dh
    mov AH,3Dh
    mov AL,0h
    mov dx,offset fileName
    int 21h
    ret


  start_program:
    mov ax,data
    mov ds,ax  
    CALL writeToFile
    mov ax,4c00h
    int 21h
code ends

end start_program

我用TurboDebugger看看会发生什么.奇怪的是,它总是放入AX值0005意味着拒绝访问

我可以在互联网上找到的所有东西,用于搜索ASSEMBLY访问被拒绝打开文件是关于DLL的,这没有帮助.

我已经尝试了任何东西,从重新启动程序到打开dosbox“作为管理员”.可悲的是,没有任何效果,我没有想法.
同样奇怪的是,我的一位朋友说,在激活他的窗户10之后,一切都运转正常.

只获得“拒绝访问”的原因是什么?我提到我能够创建,删除和关闭文件,但我无法打开它们.

解决方法

为了正确操作,writeToFile过程需要

>使用允许后续写入的访问模式打开文件
>检查DOS返回的CF,看看是否一切正常

我注意到你用“$”终止你将在这个文件中写的文本.我想知道你是否知道实际编写文件的DOS函数只能在CX中使用指定长度而不能使用任何类型的分隔符.你可以为这个“$”字符提供其他正当理由 – ;

writeToFile:
    mov  ax,3D01h    ; 01h=WriteAccess
    mov  dx,offset fileName
    int  21h
    jc   NOK
    mov  bx,ax       ; Handle
    mov  dx,offset toWrite
    mov  cx,12       ; Length of "Hello World!"
    mov  ah,40h
    int  21h
    jc   NOK
    cmp  ax,cx
    jne  NOK
NOK:
    ret

放置NOK标签的地方以及你在那里做的完全取决于你想要花多少精力来处理DOS返回的错误.在这个非常简单的程序中,您可能只是从调用返回并让程序终止.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读