找到一个检测病毒的汇编程序 看不懂,谁给翻译下

thisisll 2005-05-30 02:50:40
最好能翻译成C++
要是能说明他的都做了些什么也行

代码如下

;file name:dispmem.asm
;tasm dispmeem;
;tlink dispmem/t;

cseg segment
assume cs: cseg,ds:cseg
org 100h
start:
jmp initialize
;-------DATA AREA-----------------------
hextab db '0123456789ABCDEF'
msg1 db 'PSP SEGMENT ADDRESS: $'
msg2 db 'FREE MEMORY SIZE: $'
msg3 db 'TOTAL MEMORY SIZE: $'
msg4 db 'PARA.$'


print macro msg
mov ah,09h
lea dx,msg
int 21h
endm

dchar proc near
mov bh,1
mov ah,0eh
int 10h
ret
dchar endp

dbyte proc near
push ax
shr al,1
shr al,1
shr al,1
shr al,1
and ax,000fh
mov si,ax
mov al,cs:hextab[si]
call dchar
pop si
and si,000fh
mov al,cs:hextab[si]
call dchar
ret
dbyte endp

dsword proc near
push ax
mov al,ah
call dbyte
pop ax
call dbyte
ret
dsword endp

dreturn proc near
mov al,0ah
call dchar
mov al,0dh
call dchar
ret
dreturn endp

initialize:
print msg1
mov ax,ds
call dsword
call dreturn

print msg2
mov ax,es
sub ax,1
mov es,ax
mov bx,3
mov ax,ea:[bx]
call dsword
call dreturn
print msg3
mov ax,ds
mov bx,3
add ax,es:[bx]
call dsword
call dreturn
int 20h
cseg ends
end start

先谢谢了
...全文
118 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2005-05-31
  • 打赏
  • 举报
回复
应该可用从 TOTAL MEMORY SIZE: 来看出是否有引导型的病毒吧. 如果是 A000 的话, 一般不会有, 是 9FFFF 值得怀疑, 更小的话, 就应该好好检查了
thisisll 2005-05-31
  • 打赏
  • 举报
回复
谢谢了
zara 2005-05-31
  • 打赏
  • 举报
回复
...
mov ax,es ; 程序加载后, es 指向 psp
sub ax,1 ; ax 指向了该程序所占内存块的 MCB (内存控制块)
mov es,ax
mov bx,3
mov ax,ea:[bx] ; 这个域是该块内存的大小, 以 '节' 为单位
call dsword
call dreturn
print msg3
mov ax,ds
mov bx,3
add ax,es:[bx] ; psp+所占内存的大小.
; 由于一般情况下 dos 是将所有可用内存都分配给程序的, 所以, psp+所占内存块的大小
; 实际就是常规内存的最高端的地址. 常规内存为 640K, 即 A000 节, 也就是偏址为 0
; 时的段址为 A000. 从这里开始, 就是 VGA 的图形显示缓冲区了. 对于引导型的病毒,
; 由于那时还没有由 dos 接手内存的管理, 所以, 它只有驻留到内存的最高端, 同时,
; 将 bios 数据区中的 '可用内存' 域减去病毒自身所占用的部分, 这样保证在 dos 管
; 内存时, 不会使用到这部分病毒占用的内存块. 引导型的病毒, 一般由病毒本身, 至少
; 为一个扇区 512 Bytes, 保存的原来的(主)引导扇区的内容 512 Bytes, 这样至少会占
; 用到 1K 的空间, 有时为了病毒自己操作的方便, 或者其它概念的需要, 往往更多的情
; 况是占用 2K 的空间. 而且, bios 数据区中的 '可用内存' 域是以 KB 为单位的. 所
; 以, 如果这个最高位的内存不是标准的 A000 的话, 就需要注意了. 之所以是 '注意'
; 而不肯定是病毒, 是由于有些管理或概念增加代码, 比如些多引导的管理软件, 硬盘功
; 能扩展软件, 尤其是早期的些机型, 也会通过同样的方法在内存的高端驻留一些代码的.
thisisll 2005-05-31
  • 打赏
  • 举报
回复
楼上的高手说的太对了

能不能给我细讲下代码
rcrain 2005-05-30
  • 打赏
  • 举报
回复
这么短的代码能检测病毒?也太牛了吧
Areslee 2005-05-30
  • 打赏
  • 举报
回复
显示最基本的内存状态

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧