您现在的位置: 论文网 >> 计算机论文 >> 计算机应用论文 >> 用Windows终端仿真程序实现微机远程文件传送1论文

用Windows终端仿真程序实现微机远程文件传送1

作者:张安林
出处:论文网
时间:2007-01-18


asm push es
asm mov ah,52h //取DOS多重表指针;
asm int 21h //es为段地址,bx为偏移量;
asm mov ax,word ptr es:[bx+4] //多重表中偏移04H为第一个SFT数组控制块指针

asm mov offst1,ax //offset1为第一个SFT数组控制块偏移量;
asm mov ax,word ptr es:[bx+6]
asm mov segmnt1,ax//segment1为第一个SFT数组控制块段地址;
asm mov es,segmnt1
asm mov bx,offst1
asm mov ax,word ptr es:[bx]
asm mov offst2,ax//offset2为第二个SFT数组控制块偏移量;
asm mov ax,word ptr es:[bx+2]
asm mov segmnt2,ax //segment2为第二个SFT数组控制块段地址;
asm mov ax,word ptr es:[bx+4]
asm mov jjj1,ax //jjj1中存放第一个SFT数组的项数,一般为五
asm mov es,segmnt2 //个(系统保留的五个常用文件的SFT);
asm mov bx,offst2
asm mov ax,word ptr es:[bx+4]
asm mov jjj2,ax //jjj2中存放第二个SFT数组的项数,它一般等于
asm pop es //CONFIG.SYS中FILES=N的N值减去第一个SFT
//数组中SFT项数jjj1;
ptrr1=(unsigned char far *)MK-FP(segmnt1,offst1+6);
//ptrr1指向第一个SFT数组中第一个SFT
Ptrr2=(unsigned char far *)MK-FP(segmnt2,offst2+6);
//ptrr2指向第二个SFT数组中第一个SFT
if(iii { //一定在第一个SFT数组中;
// for(i=0;i<0x3b;i++) //这两行可用来显示该文件的SFT;
// printf(" %2x",ptrr1[iii*0x3b+i]); //在DOS4.0-6.0中共0x3b个字节;
asm push es
asm push di
asm les bx,ptrr1 //第0个SFT的地址;
asm mov ax, iii
asm mov cx,3bh
asm mul cx
asm mov di,ax //第iii个SFT的地址,即要找的本文件的SFT;
asm mov ax, word ptr es:[bx+di+1bh] //SFT中偏移1bH处是目录项所在扇区的
asm mov word ptr u-long,ax //扇区号,可用于定位文件,取出存于
asm mov ax, word ptr es:[bx+di+1dh] //u-long中;
asm mov word ptr u-long+2,ax
asm mov al,byte ptr es:[bx+di+1fh] //偏移1fH处是目录项的相对索引号,即

asm mov u-char,al //录项在目录扇区中的序号,也可用于定位
//文件的位置,取出存于u-char中;
asm mov ax,word ptr es:[bx+di+35h]//SFT中偏移35H处是文件读写指针对应的
asm mov u-int,ax//绝对簇号(2字节),取出存于u-int中;
asm pop di
asm pop es
}
else
{
iii-=jjj1; //第二个SFT数组中的SFT项和第一个SFT数组中的项是统一编号的;
// for(i=0;i<0x3b;i++)
// printf(" %2x",ptrr2[(iii)*0x3b+i]);
asm push es
asm push di
asm les bx,ptrr2
asm mov ax,iii
asm mov cx,3bh
asm mul cx
asm mov di,ax
asm mov ax,word ptr es:[bx+di+1bh]
asm mov word ptr u-long,ax
asm mov ax,word ptr es:[bx+di+1dh]
asm mov word ptr u-long+2,ax
asm mov al, byte ptr es:[bx+di+1fh]
asm mov u-char,al
asm mov ax,word ptr es:[bx+di+35h]
asm mov u-int,ax
asm pop di
asm pop es
}
u-long+=u-int; //这里采用的秘密算法是相加;
u-long+=u-char;
fclose(Stream);
retrun u-long;
}
下面就是设置“钥匙”的PUT-KEY/CPP文件的内容。
#include
#include
#include
#include
#include
#include "make-key.cpp" //将取钥匙子程序包函进来;
void main(int argc,char * argv[]) //命令行上是待加密的文件名;
{
unsigned long key=0;
FILE *stream;
if (argc<2)
{cputs("specify a file");exit(1);}
key=curentlocation-key(argv[1]); //取出文件当前“钥匙”;
stream=fopen("loc-key.dat","w+b"); //以写方式打开“钥匙”文件loc-key.da
t;
if(stream==NULL)
{cputs("can’t open file loc-key.dat");exit(1);}
fwrite(&key,4,1,stream); //将当前“钥匙”(4字节)写入文件;
fclose(stream);
}
下面就是NO-COPY.CPP的内容:
#include
#include
#include
#include
#include
#include
#include
#include "make-key.cpp" //将取钥匙子程序包函进来;
//该程序main()函数如下:
int main()
{
//下面是一段检测代码,(可放在程序中必要的地方);
unsigned long proto-key,curent-key;
FILE*Stream;
Stream=fopen ("loc-key.dat","rb");//以读方式打开“钥匙”文件;
if(Stream==NULL)//若因破坏而打不开则退出;
{cputs("loc-key.dat open error");exit(1);}
fread(&proto-key,4,1,Stream);//取存放于文件中的“原钥匙”(4字节);
fclose(Stream);
curent-key=curentlocation-key("d.exe");//按同样的方法取“当前钥匙”;
if(curent-key!=proto-key)//比较“当前钥匙”和“原钥匙”;
{
cputs("The file has been moved and is invalid!");exit(1);
}
//若不相等,说明当前的文件位置与装入时的位置不同,//文件已经被移动过,这里可异常执行;
cputs("The file is valid");//否则正常进行,完成程序的功能;
//以下是程序代码;
//...
//...
return 0;
}//为了防跟踪,当打不开“钥匙”文件或发现文件已被移动过时,可不退出,而是
//异常执行;
以上程序用Borlandc c++3.1编写,使用时,分别编译连接PUT-KEY.CPP和NO-COPY.CP
P形成PUT-KEY.EXE和NO-COPY.EXE。然后在DOS提示符下键入:
NO-COPY
就会得到loc-key.dat open error 的信息,程序退出,这是因为还没有运行PUT-KEY来设置“钥匙”。
若先键入PUT-KEY NO-COPY.EXE 来为NO-COPY.EXE设置“钥匙”
再键入NO-COPY
则得到The file is valid 说明正常执行。
若将NO-COPY.EXE拷贝到其它目录再执行就会得到loc-key.dat open error 的信息,程序退出。
若将loc-key.dat 一起拷贝到其它目录再执行
则得到The file has been moved and is invalid!
若先在新目录运行PUT-KEY NO-COPY.EXE 来为新的NO-COPY.EXE设置“钥匙”
再运行新的NO-COPY
则得到The file is valid 说明正常执行。
若要对一个或多个数据文件加密,可对PUT-KEY.CPP稍加修改,再在使用这些数据文件的可执行文件的原程序中加入检测代码即可。若要修改加密算法或调整“钥匙”的取出方
法,则只需修改curentlocation-key()函数。

上一页 [1] [2]

论文搜索
关键字:Windows 终端 仿真程序 微机远程 文件传送1
最新计算机应用论文
基于网络信息安全技术管理的计算机应用研究
浅析人工智能体系建设
抖音短视频平台视频推荐模式研究
应用电子技术中可编程控制器的应用探讨
用友NC信息系统的实施应用实践研究
基于校园一卡通数据系统的学生行为分析研究
云环境下基于蚁群算法的动态容错技术研究
自拍图像中的记忆痕迹
抖音短视频用户使用动机研究
基于创新扩散理论的Vlog传播
热门计算机应用论文
学生成绩管理系统的设计与实现
浅析计算机病毒及防范的措施
学籍管理系统软件
对计算科学与计算机发展的思考
计算机应用型人才的培养模式研究
物资管理信息系统开发
计算机信息管理在第三方物流中的应用
嵌入式系统数字图像采集接口电路设计
基于B/S体系结构开发应用系统
项目管理在软件中的应用