wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了汇编 – 使用3Dh会导致中断仅返回“已拒绝访问”大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

配置: 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 "
配置:

我在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返回的错误.在这个非常简单的程序中,您可能只是从@R_403_1872@并让程序终止.

大佬总结

以上是大佬教程为你收集整理的汇编 – 使用3Dh会导致中断仅返回“已拒绝访问”全部内容,希望文章能够帮你解决汇编 – 使用3Dh会导致中断仅返回“已拒绝访问”所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。