|
![]() | 作者: jzit_wmm [jzit_wmm]
![]() |
登录 |
我在编写一个中断程序,但运行不了,请斑竹和各位大虾看一下!!!! data SEGMENT intoff DW ? intseg DW ? intmsg DB 'i fuck you,i can fly' DB 0dh,0ah,0 data ENDS code SEGMENT ASSUME CS:code ,DS:data start: MOV AX,code MOV DS,AX MOV AX,3580h INT 21h MOV intoff,BX MOV intseg,ES PUSH DS MOV DX,OFFSET new80h MOV AX,SEG new80h MOV DS,AX MOV AX,2580h INT 21h INT 80h new80h PROC STI MOV AX,data MOV DS,AX MOV DX,OFFSET intmsg PUSH AX PUSH BX PUSH SI MOV SI,DX new1: MOV AL,[SI] CMP AL,0 JZ new2 MOV BX,0 MOV AH,0Eh INT 10H INC SI JMP new1 new2: POP SI POP BX POP AX IRET new80h ENDP POP DS MOV DX,intoff MOV AX,intseg MOV DS,AX MOV AX,2580h INT 21h MOV AH,01 INT 21h code ENDS END start |
地主 发表时间: 05-04-12 13:03 |
![]() | 回复: 286 [unique] ![]() |
登录 |
这是早期的TSR程序,也就是中断驻留程序。早期DOS是个单用户单任务的操作系统。 运行一个程序,系统就把CPU使用权给该程序,该程序运行完,把权力又给了系统,并且系统把该程序占的资源回收,而TSR则在退出后不回收,挂到某个中断上,当这个中断被触发时,就得到运行。 你的程序我没时间看,不过看上去,结构是没错。我不知道你说的运行不了是哪方面的运行不了。是编译不通过,还是通过了到不了自己设想的结果。 如果是前者,过两天或别的人帮他看看。如果是后者,原因是这样的:WINDOW是多用户操作系统,其中的DOS方式也仅是WINDOWS的一个虚拟机,所以你打开一个DOS窗口,然后运行TSR,只要这个窗口不关,TSR还是存在,有些(注意是有些)程序可以正常。但一旦你关掉就没了。 所以要调这类程序,你需要在一个纯净DOS系统,这个纯DOS有两种方法,一种是你用98制作一张安装盘,另一种是启动时选DOS模式。 |
B1层 发表时间: 05-04-12 17:22 |
![]() | 回复: jzit_wmm [jzit_wmm] ![]() |
登录 |
这段 中断程序 连接,编译都通过了,但运行后,屏幕一闪,窗口自动关闭。 我尝试着 把 new80h中的 返回指令 iret 去掉后,屏幕 显现期望中的 字符,但一按 any key 出现如下对话框: 16位MS-DOS 子系统 c:\visulasm\mywork\1.exe NTVDM CPU 遇到无效指令。 CS:0557 IP:8bb3 OP:63 68 2d 70 61 选择‘关闭’终止应用程序。 关闭 忽略 原来程序中 的 pop DS 在start 中到数 第二行,我把它移动到 new80h endp 下的 第一行, 没有移动 之前,编译连接,运行后,出现相同的 对话框,但CS,IP OP的值不同。 [此贴被 jzit_wmm(jzit_wmm) 在 04月12日22时58分 编辑过] |
B2层 发表时间: 05-04-12 22:36 |
![]() | 回复: 286 [unique] ![]() |
登录 |
首先,你说的现象应该是TSR正常现象。 因为TSR程序不是执行某一功能,而是运行后留到内存中,并修改某个中断,当这个中断被触发时(说的通俗点,就是有人调用这个中断时)中断程序部分才得到运行。 |
B3层 发表时间: 05-04-13 09:08 |
![]() | 回复: jzit_wmm [jzit_wmm] ![]() |
登录 |
谢谢斑竹,但我仍有疑惑,我已经 用 int 80h 调用中断程序了,为何没结果,我去掉iret后,反而有了结果?? |
B4层 发表时间: 05-04-14 18:07 |
![]() | 回复: 286 [unique] ![]() |
登录 |
你在DOS方式下,提示行中运行前者,然后再运行后面调用部分。不要通过双击运行,因为双击时,两个程序运行的DOS环境不是同一个。 去掉IRET,该中断就没有返回了。 |
B5层 发表时间: 05-04-15 09:16 |
![]() | 回复: jzit_wmm [jzit_wmm] ![]() |
登录 |
![]() 这个程序我用 visualasm 编译连接都通过,但运行不了。根本不生成 obj文件和exe文件。 我用masm5,根本没消息,也不说对,也不说错,更没生成 文件!!!! |
B6层 发表时间: 05-04-15 19:32 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号