访问手机版页面
你的位置:老古开发网 > 其他 > 正文  
程序中关于变量的引用,和函数的调用
内容导读:

程序中关于变量的引用,和函数的调用

cseg segment
 assume cs:cseg,ds:cseg
 org 100
start:
 mov bx,word ptr aaa
virus_start:
 call get_start
 mov ah,4ch
 int 21h
get_start:
 mov ax,offset virus_start
 ret

aaa db ''abcd'',0
cseg ends
end start

上面的程序进行反汇编之后。
-u
13E7:0064 8B1E7300      MOV     BX,[0073]
13E7:0068 E80400        CALL    006F
13E7:006B B44C          MOV     AH,4C
13E7:006D CD21          INT     21
13E7:006F B86800        MOV     AX,0068
13E7:0072 C3            RET
13E7:0073 61            DB      61
13E7:0074 62            DB      62
13E7:0075 63            DB      63
13E7:0076 64            DB      64

可以看到程序引用变量aaa的时候,是通过绝对地址进行引用的。
13E7:0064 8B1E7300      MOV     BX,[0073]
8b1e 是操作码,7300是操作数。可以知道操作数是一个绝对地址。

在进行函数调用的时候
13E7:0068 E80400        CALL    006F
你可能会以为call 006f是通过绝对地址来进行函数的调用的。
可是这是反汇编之后的,是经过加工了的。
我们要看的是操作码和操作数,在该指令中
操作码是e8,操作数是0400(也就是4),可见是相对于
13E7:006B B44C          MOV     AH,4C(call 006f的下一条语句)的指令偏移。


这些知识都是写COM之类病毒的最基本的知识

 

附:函数的调用分为near,short,far.

short最惨,被调用的函数和调用点只能有128字节的偏移量。

near可以达到64k(可以调用本段的函数),随意对于COM足够用了。

far则可以调用任意段的函数。

标签:
来源: 作者: 时间:2006/9/25 16:50:53
相关阅读
推荐阅读
阅读排行
最近更新
商品推荐