71 12345678
82622206

田鼠

中级会员

将军

贴子 1814

精华 3

积分 1061

信用 0

竞猜 0

魅力 188

威望 0

现金 70 CZB

银行 0 CZB

黄金 0

比特币 0

注册时间 2005-06-01

发表于:2005-12-06 08:12:15   |  显示全部帖子   |  转账至  82622206
photoshop8招密技

密技一:
当你需要快速隐藏工具栏和多个浮动面板时,逐一点击面板上的关闭按钮,接下来使用时又要打开,十分不方便。其实你可以同时按键盘上的“Shift”和“
Tab”键,这样浮动面板会立即隐藏起来,从屏幕上消失,再同时按下两键,面板又会显现;如果只按下“Tab”键,则工具栏连同浮动面板会一起隐藏,再按以下该键,它们会同时显现。

密技二:
在Photoshop中,有很多时候要修改设置的取值。一般情况会在取值框的又侧有一个黑三角,点击它会出现一个滑动标尺,拖动标尺就可以修改取值了,但有时不会十分精确。这时可以按键盘上的向下箭头键(每按一下表示取值加一)和向上箭头键(每按一下表示取值减一),来准确调整数值。如果按住 “Shift”键不放,那么每按一下表示取值加十或减十。

密技三:
当你正在使用画笔工具,要调整不透明度时,还要打开设置框,很麻烦。这时你可以直接按键盘上的数字键来设定。比如当你按一下“
0”键时,则不透明度为100%。“ 1”键为10%。先按“ 4”再按“
5”,那么不透明度则为45%,依次类推。
密技四:
当我们要复制文件中的选择对象时,要使用编辑菜单中的复制命令。复制一次你也许觉不出麻烦,但要多次复制,一次一次的点击就相不便了。这时你可以先用选择工具选定对象,而后点击移动工具,在按住“Alt”见不放。当光标变成一黑一白重叠在一起的两个箭头时,拖动鼠标到所需位置即可。若要多次复制,只要重复的放松鼠标就行了。

密技五:
我们需要多层选择时,可以先用选择工具选定文件中的区域,拉制出一个选择虚框;然后按住“Alt”键,当光标变成一个右下角带一小“-”的“+”号时(这表示减少被选择的区域或象素),在第一个框的里面拉出第二个框;而后按住“
Shift”键,当光标变成一个右下角带一小“+”的大“+”号时,再在第二个框的里面拉出第三个选择框,这样二者轮流使用,就可以进行多层选择了。其实用这种方法也可以选择不规则对象,自己去体会吧。

密技六:
当我们编辑图片文件时,有时要去掉选择对象以外的图片颜色,这时可以按键盘上的“Delete”键,选择区以外就会变成背景色或透明的,这要看你设定的背景内容是什么了。

密技七:
去掉扫描图片中的龟纹。由于印刷方面的原因,我们用扫描方式输入电脑的图片会有一些龟纹,如果在此基础上进行处理,会影响以后的效果。这时你可以先用 “Noise”滤镜中的“Despeckle”做处理,这时图片会变得稍微模糊;接着用“Sharpen”滤镜中的“Sharpen
Edge”(注意设置数值要小一些)再处理一下,就大功告成了,这时即使用放大工具观察也不会出现龟纹了。

密技八: 我们使用Photoshop
一段时间后,文件夹中已经存放了大量的图片和影像文件。当你要调用一个很久不用的文件,并且忘记了它的文件名时,需逐一打开文件夹中的文件来寻找,太麻烦了。我有一简便的方法:Photoshop
的File 菜单下的Automate 中有一个Contact Sheet
命令,它可以给文件夹中的每个文件建立一个小缩图,并存放在一个图象文件中,这样方便了以后的检索和查阅,节省了你我的宝贵时间.持这样“苗条”的身材。


photoshop超级小技巧

以下要为您介绍的PhotoShop技巧虽不敢保证您掌握了就一定会成为高手,但却是成为高手的必由之路,如果你想成为高手中的一个,还是看看的为好。至少它可以保证让你的操作更简单一些。注:以下方法对MAC同样有效,只不过是Ctrl键要换成Command键,Alt键要换成Option键。

  1、图形的复制
  不管使用何种工具,只须将图形选择后,同时按住Alt和Ctrl键,用鼠标左键按住图形拖动即可。如图形在拖动前未被选择,则将复制出相同的图层。


  2、图形的微移
  有时因图形太小等原因,用鼠标进行微小移动操作很不方便,这时只要选中移动工具,按下键盘上的上下左右方向键,即可令图形自如移动。


  3、图层移动技巧
  要把当前的选中图层往上移,只要按下Ctrl键后,再按下“]”键,就可以把当前的图层往上移动;按下Ctrl键后,再按下“[”键,就可以把当前的图层往下移动。


  4、快速查看Photoshop的处理效果
  在使用Photoshop时,如果要查看对选择区处理后的效果,就要去掉选择,我们可以利用Photoshop的隐藏选择办法,但是比较麻烦。其实,你只要按上键盘上的Win键,就可以看到图片处理后的效果了。当你再按Win键时,又会回到选择状态了。


  5、精确裁减图像
  裁切工具大家都一定用过,这种情况你也一定遇到过:在你调整裁切框、而裁切框又比较接近图像边界的时候,裁减框会自动地贴到图像的边上,令你无法精确裁切图像。不过只要在调整裁切框的时候按下“Ctrl”键,那么裁切框就会服服帖帖,让你精确裁切。


  6、改变上一毕的透明度
  你可以改变绘图(包括用毛笔,铅笔,喷枪,橡皮画的东西)的透明度。首先,画上一笔,然后在滤镜菜单下面的会出现“退去X”(X取决于你刚在的那笔是用哪个工具),点击它,出现“退去"菜单,现在你就可以改变你上一笔的透明度了。
鱼溺水而亡,是为了让大海能够记住他~
61楼
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删帖    删帖    |   
82622206

田鼠

中级会员

将军

贴子 1814

精华 3

积分 1061

信用 0

竞猜 0

魅力 188

威望 0

现金 70 CZB

银行 0 CZB

黄金 0

比特币 0

注册时间 2005-06-01

发表于:2005-12-06 08:12:56   |  显示全部帖子   |  转账至  82622206
FLASH经典问答   
第一篇:FLASH资源
问:请介绍几个几个国内比较好一点的FLASH论坛。
答:闪客帝国http://www.flashempire.com/
闪盟在线: http://www.flashsun.com/

问:现在市面上FLASH的书那本最好?
答:《网页动画制做-flash4》是一本很不错的书,由老虎工作室编著,出版:人民邮电出版社,定价:42元,带1HD。如果想提高看《FLASH十全大补》,出版:希望出版社,定价:50.00元。带1CD。 台湾两只老虎中的胭脂虎所著。另外《flash4跃动的网页》也不错,由台湾施威铭研究室编著,定价:59元,出版:中国青年出版社,带1CD。

问:请国内有哪些地方提供矢量图库和音效?
答:矢量图形:
http://zsunshine.163.net ;曦曦天地
http://zippy.yeah.net ;闪光地带
http://www.newflash.com ;闪客沙龙
http://dongua.126.com ;东瓜茶轩
音效http://wav.126.com ;灰丫音效资源站
下面的地址有更详细的说明
http://202.106.124.57/~eastecho/fbb...44.html关于图库
http://202.106.124.57/~eastecho/fbb...45.html关于音效

问:请介绍一些国外的FLASH教学站点。
http://www.virtual-fx.net/ ;内有大量英文教程,分类详细。
http://www.were-here.com/forum一个不错的英文FLASH论坛。
http://www.flashaddict.com/links.ht...唇诱镜慵凹蚱馈?/a>;

第二篇:flash基础

问:很多人说到的MC、FS代表什么意思?
答:MC=Movie Clip。动画片断。FS=FSCOMMAND,是FLASH的一个非常重要的一个命令集合。

问:MC到底如何运用呢?我是指将一个MC引用到场景中后,如何播放?一个很长的MC放在场景中要占据几帧的位置?
答:把MC拖到场景中,动画播放时它就会自动播放,如果你没有在最后一帧加上stop,MC会默认为循环。这里要提一下,要观看播放的效果须执行Ctrl+Enter。一个很长的MC放入场景中也只占据一帧的位置,如果将它拖了很多帧,执行时每隔一帧MC都会重放。


问:为什么在用flash做“沿轨迹运动”时总是沿直线运动,和教程对照了一下,做法完全一样,怎么不行?
答:这个问题似乎总会困扰初学者,但实际上问题很简单。首尾2帧中心位置没有放准在轨迹上。一个简单的检查办法:你把屏幕大小设定为400%或更大,察看图形中间出现的圆圈是否对准了运动轨迹。


问:为什么我在FLASH中做旋转为什么总是转不快。有什么办法可以转快一点呢?
答:你把播放速度调快,比如30祯/秒,方法:主菜单->modify(修改)->movies(影片),加大Frame rate(影格速度)的值便可。

问:请问制作按钮时,“hit”是用来做什么的?什么时候需要用到?很多教程都没具体讲解“hit”的用法。
答:hit是指定按纽的激发区域。在HIT内设定的区域在播放时是不会显示出来的。如果没有指定HIT区域,一般FLASH会默认你的按纽区域作为激发区域。比如:用文字做按钮时,最好能定义一个矩形来做触发区,而不是系统默认的文字内容。

问:如何把flash放到FP2000、FP98中去?
答:FP98和FP2000对FLASH的支持较差,不能直接在其中插入FLASH动画,解决办法是在SWF文件发布、原代码生成后,把HTML文件中的 部分拷过去便可。建议使用DREAMWEAVE来制做FLASH动画网页,会方便很多。

问:如何把一个fla文件输出成和swf一样的gif文件
答:先在Publish settings(发布设置)->format(格式)->Gif image(gif影像),并对其进行相应的设置之后,用Publish(发布)功能便可输出GIF文件。如果FLA文件中含有MC,那么GIF文件中将不会包含MC中的动画,而将只将MC的第一桢转化为GIF。

问:把做好的一个只有十几K的FLASH放入网页中后,预览网页时,为什么要等好长时间FLASH才能被显示。
答:检查SWF文件的名字.路径是否正确,如果不正确系统会试图长时间等待。

问:如何设置FLASH的背景?
答:设定背景颜色可以按Ctrl+M,选color项里的BACKGROUND(背景),如果想用一幅图形做背景只需在最下的一个层import(输入)一幅图像便可。

问:在FLASH中,怎样画一个圆圈,如何修改圆圈的颜色?
答:画圆的时候把填充色(颜色设定的左上角选项)设为无就可以了!把边框的颜色设定为相应颜色便可。

问:外部导入txt如何变字体的颜色?
答:在设定文本框时,设定字体的颜色。

问:才打开FLASH4时使用铅笔工具画圆时还可以,但再次新建一个时用铅笔工具画圆时(模式是平滑)画出来的却不是一个圆或者椭圆!这是怎么回事?
答:按住Shift的同时画圆,你能画的更圆!

问:我做出来的文字与图形总是很难对齐,请问如何对齐目标,并把它们放到你想要的位置。
答:选中目标,然后从主菜单->windows(窗口)->inspector(查看窗)->object(对象)然后便可以调节它的高(h)、宽(w)、起始位置(x,y)和是否中心对齐(use center)。

问:如何才能将文字或图画做变形?
答:Ctrl+B把动作的头和尾打散后即可!symbol是不能做shape的。

问:请问如何将文字或图镂空?
答:打散字或者图形,先用涂边框工具将它的边缘上色,然后再选中中间部分将之删除便可。

问:如何制作边缘模糊的MASK效果?
答:在做好MASK效果后再在其上面加一层有模糊边缘的色块。

问:FLASH4的多个场景之间如何调整播放次序?
答:主菜单->windows(窗口)->inspector(查看窗)->Scene(场景),可以对场景进行调整播放次序、改名、删除等*作。

第三篇:flash进阶

问:请问在Linux下如何观看flash动画,有插件for Linux的么?
http://www.openswf.org/有。

问:刚下载安装的Flash插件已落户在电脑的什麽地方?
答:在C:\WINDOWS\SYSTEM\Macromed\Flash里看看

问:如何将fla文件直接生成exe文件?
答:带有标题栏的swf文件可以通过菜单直接生成exe,是在Flash Player打开swf文件,然后选择file(文件)-> creat projector(建立项目)。如果加上了FS命令将文件全屏显示后标题栏没了,便可用CTRL+F热键来生成。生成的执行文件内置了播放器,将比SWF文件大二百多K。

问:请问如何把做好的flash转换成屏幕保护程序?
答:用SWF browser 2.8或者screensaverhttp://iching.topcool.net/有下载。

问:请问如何借用别人作品中的内容。是否可以将SWF文件完全解码成FLA文件。
答:用SWF browser 2.8可以解开别人的SWF文件,将其中的图像.声音取出保存。到目前为止还没有任何一个软件可以将SWF文件完全反变换成FLA文件。

问:如何在FLASH中实现3D效果。
答:在FLASH中不能其接生成3D的动画,需借助其它的软件才行。比如3D MAX,然后再安装上vecta3D或者Illustrate! 4.0(4.1)插件便可以直接输出swf格式的动画了。最新的3D制做工具是Swift 3D,上述插件与工具http://zippy.yeah.net有下载,可惜这...PU低于400,内存<;128M者不要尝试。

问:怎样做到字列成环型并围绕圆心转动?
答:你可以用CORELDRAW软件或者相关软件做好了,生成AI格式文件,再导入到FLASH中便可!

问:FLASH的动画背景可以是透明的吗?如何设置?
答:当然可以,在发布设定中的HTML栏中有一项是窗口模式,选透明的窗口一项就OK。若是在html中引用flash可在html文件中的前加上下面的语句:。不过透明只能在IE中可以,在NC中便失效了。

问:有什么方法能把普通位图图片转换成矢量图片呢?
答:用AdobeStreamline软件http://iching.topcool.net/有软件下?..Hand8转换亦可。

问:请问那种格式(后缀)为矢量图?请问用那个软件可以浏览这些矢量图?
答:*.ai *.eps *.wmf *.cdr,其中前面三种可以在FLASH中直接引用。cdr格式需转换成前三种格式方可引用。如果你安装了 CORLDRAW便可以在资源管理器中直接预览CDR格式的图形。其他格式的还没有软件能够象ACDSee浏览普通图片一样大量浏览。

问:在SWF中,怎样去掉点击鼠标右键所出现的内容?
答:在publish settings里面有show menu的勾选。但是对于网页上的flash它始终会出现flash字样。如果你把它做成exe文件的话,就什么也没有了。

问:如何让双击SWF文件时可以直接满屏播放?
答:在最后一桢的ACTION里选FSCOMMOND一项,然后在右边选中fullscreen,true,便可!

问:怎么做出象电视受干扰时的雪花啊??
答:先画一些短的白线条(细一点,稍微有点灰度),然后做几个关键帧,每帧里随机的放一些,连续播放一下就有效果了。

问:请问一串字或一幅图由模糊变清晰的效果怎样做?
答:刚开始的时候将ALPHA(透明度)设小一些,最后位置的ALPHA 0%,关键祯之间用MOTION变化。注意,是SYMBOL才能MOTION,除了用alpha外,最关键的还是要用相同内容不同的层来错开,做出模糊的效果!

问:打字的效果是怎么做模ň褪亲忠桓鲆桓龅爻隼矗┬枰?衙扛鲎侄甲?怀勺榧??
答:
方法1、为每一个字建立一个MC,然后在第一帧中引用第一个字,隔两至三祯,按F6,复制关键祯,再引用第二个字,再隔两,三祯,按F6,引用第三个,以此类推。如果加上打字的音效,效果会更好。本方法适于字数较少的地方。
方法2、如果你只是简单地让它们出现,可以在字上加一层,然后用底色做一个矩形,把字遮住。并将矩形设定为MC,给实体命一个名字(instance name),然后用Set Property语句编程实现矩形的跳着移动便可。这种办法适于字数较多的地方。 第四篇:FLASH的声音处理

问:如何制作音乐开关?
思路:将音乐放入MC,用Tell Target来控制这个MC的播放和停止。
相关文章或源文件: http://www.flashempire.com/tutorial...l作者:边城浪子
http://netschool.cpcw.com/homepage/...htm作者:小东瓜

问:请问如何调节音量
答:用纯粹的FLASH不能连续调节音量,只能分段调节。
http://netschool.cpcw.com/homepage/...《?闲吹慕坛獭?/a>;

问:如何在文件中加可控制的背景音乐
答:天极网有教程http://sh.cpcw.com/netschool/homepa...m作者:starwind

问:如何使声音无限循环?
答:将声音的循环次数定义成足够大便可。

问:怎样在音乐完成后执行一个动作?
http://202.106.124.57/~eastecho/fbb...TML/000382.html ;

问:怎样才能截取音乐?
答:闪光地带http://zippy.yeah.net)里面有SoundF...媚诼嫉姆椒?贾?/a>; ,效果非常好,如果音量变小了,用effect里面的dynamic—graphic—expand可以扩大。另外CoolEdit、GoldWave也是很不错的选择。

问:我想在一个CD或VCD里面保存一个声音文件是怎么样保存的呢? 我想我所保存的声音可以导出在FLASH里面使用。请问Flash中如何加入.mp3?
答:用sthvcd,vcdcutter或其他东东剪下来就可以了。Flash中不能加入mp3,若为mp3格式,可通过winamp或其它软件转成wav,然后要编辑的话用soundforge 4.5。

问:那里有Sound Forge 4.5的教程?
http://yongong.topcool.net/ ;音乐编辑那个栏目。

问:请问如何把midi转换成wav?
答:MIDI转EAV的方法如下:
1。用WINGROOVE这个软波表直接转换,不过音色是WINGROOV自带的,没有得选择余地的!所以这是最简单最原始的方法,效果一般!这个软件http://www.cc.rim.or.jp/~hiroki/english有下载。
2。用两个声卡,一个放一个录。放的那边用软波表,如YAMAHA100等或者声卡自带的硬波表,录音后还可以降噪!此方法还可以!但是如果结合下面的方法就更好了!
3。用软音源软件,如REALITY或者GIGASAMPLER等代替波表,使用专门的音色库来转,这样只要一个声卡就解决问题了!此方法可以使用你认为最好的音色,音质也是几乎没得挑剔的,WAV的质量接近下面的 方法了!
4。如果你钱很多的话,就用专门的音源和硬盘录音机吧!



第四篇:FLASH的Action功能
问:如何通过按钮给别人发E-mail.
答:get url:mailto:dongua@21cn.com


问:如何用GET URL功能打开一个窗口
答:在get url中输入javascript op(‘dongua.htm’,550,400), get url支持简单的javascript语句,这种方法跟选择_blank不同。

问:在主页中,flash文件老是自己重复播放,不知怎样实现只播放一次
答:在最后一桢的ACTION中加上STOP语句!

问:关键帧中的脚本里stop后的脚本会不会起作用?
答:stop语句只停止帧的播放,并不能停止该STOP所在关键帧的ACTION语句的执行。

问:我如可才能把“别人网页”中的SWF文件下载到自已的硬盘上呢?
答:方法1、在FLASH动画上单机鼠标右键,选目标另存为……OK! 方法2、在你的浏览器缓冲目录里面有你看过FLASH的SWF文件!一般情况下系统的默认目录是:
windows->Temporary Internet Files,查找swf文件,其中保存的swf文件数量跟浏览器设定的缓存空间有关,然后将它COPY出来便可。

问:如何计算sin、cos等函数?
思路:利用有关的数学公式将函数转换

相关文章或源文件:
http://www.flashempire.com/tutorial...tml作者:小魔女
http://dongua.163.net/flash4/fla/<;;I>function.fla东瓜茶轩

问:要得到a值除以b值所得到的余数,其表达式该怎么写?
答:a-b*int(a/b)便可!

问:如何在FLASH中重复播放部分影格N次然后再跳转?
答:Set variable: “i” = 1

Set variable: “time” = 5
comment:time表示重复次数。
comment:以下是想重复的内容帧名为repeat
…………
If (i<=time)

Set variable: “i” = i+1
Go to and Play (repeat)

End If
便可。

问:如何制作鼠标跟随动画?
答:思路:利用Start Drag语句让一个MC随鼠标运动,再利用该MC的x、y坐标等属性产生相应的变化
相关文章或源文件:
http://www.flashempire.com/tutorial...l作者:边城浪子
http://www.flashempire.com/tutorial...tml作者:Jimbob
http://202.106.124.57/~eastecho/fbb...TML/000029.html ;

问:如何使用FScommand制作时钟?
答:在天极网有相关教程
http://netschool.cpcw.com/homepage/...tm作者:newfish

问:如何进行碰撞检测?
答:思路:1、用get property检测运动MC的位置;
2、对于一些和鼠标跟随有关的碰撞检测,可以用_droptarget
相关文章或源文件:
http://www.flashempire.com/tutorial...l作者:FlashGun
http://202.106.124.57/~eastecho/fbb...TML/000215.html ;

问:返回值中或者需load进入动画的文本文件中如何表示空格和其他特殊字符?
答:用“+”代替空格 “name= 小东瓜”写为:“name=+小东瓜” 在异景空间http://iching.topcool.net/)有相对应特殊字符的转换表。

问:如何调用一个.exe的可执行文件,比如:我用vc编好的可执行文件。
答:用fscommand(“exec”,“执行文件名”)便可。需注意此时执行文件的路径是否正确。

问:如何禁止菜单、Zoom In(Out)功能,如何完成双击SWF文件时直接全屏
答:在第一桢中输入下面命令:
全屏->FS Command (“fullscreen”, true)本全屏只是简单地将屏幕占满,动画部分并不会因此而放大。
禁止缩放->FS Command (“allowscale”, False)
禁止菜单->FS Command (“showmenu”, False)

问:在网页中如何分帧来控制FLASH动画
答:晨曦空间有教程http://starwind.yeah.net作者:newfish

问:如何载入外部动画(*.swf),如何控制载入动画的位置?
答:相关文章或源文件:
http://202.106.124.57/~eastecho/fbb...TML/000009.html ;
http://202.106.124.57/~eastecho/fbb...TML/000572.html ;
http://202.106.124.57/~eastecho/fbb...TML/000159.html ;

问:如何在网页中判断是否已安装插件?
http://202.106.124.57/~eastecho/fbb...tml有详细说明。

问:flash4是怎么样制作聊天室?
答:需要cgi的支持。比如:asp、perl、php等。国内专门介绍CGI与FLASH联合编程的站点较少,你可以去国外的一些站点看看。

问:如何制作留言板?
答:分成上、下两篇。用Asp+Flash实现。
http://www.flashempire.com/tutorial...l作者:边城浪子
http://www.flashempire.com/tutorial...l作者:边城浪子

问:如何做计数器?
答:主要是用cgi程序(asp,perl,php等)将数值写入文本文件中,然后利用FLASH的读文本文件的功能将数字读出来并显示。

问:如何将asp中的变量内容传回FLASH中
答:在ASP程序(getname.asp)的最后写入下面代码:Reponse.write("name=小东瓜&email=dongua@21cn.com")注意此时的变量传送方式与从文本中传送有一样的规则。
然后在flash中使用Load variables ("getname.asp", "", vars=POST) 便可。

问:如何制做烟花效果?
答:[urlhttp://202.106.124.57/~eastecho/fbbs/Forum2/HTML/000590.html作者:boat

问:如何...TML/000142.html ;
http://203.39.170.10/http/movies/zi...ip作者:Richard James Rose
http://203.39.170.10/http/movies/zi...zip作者:Martyn van Beek

问:如何制作Loading?
答:使用_framesloaded、_totalframes两个变量可以完成 相关文章或源文件:
http://www.flashempire.com/tutorial...l作者:边城浪子
http://www.flashempire.com/tutorial...tml作者:小东瓜

问:如何判断载入外部swf的进度?
答:可以使用被载入swf的_framesloaded、_totalframes两个变量,加上被载入动画的名字。
相关文章或源文件: http://202.106.124.57/~eastecho/fbb...TML/000516.html ;

问:如何把FLASH中的输入的文本存到另一个文本文件!
答:FLASH自己不行!需要与其他软件联合编程来完成。比如:ASP,PERL,PHP。

问:经常听到别人说到路径,到底FLASH中的路径起到一个什么作用?
答:如果你用过DOS,您就可以很容易理解FLASH的路径。简单地说,路径就是在FLASH编程时能够找到变量或者符号(symbol)所经过的路。其方式跟DOS一样,分成相对的和绝对的两种。
可以看一看下面两个地址中介绍的内容:
http://202.106.124.57/~eastecho/fbb...TML/000009.html ;
http://202.106.124.57/~eastecho/fbb...TML/000525.html ;

问:flash编程用什么工具软件较好
答:用ActionClip1.4,你先在任何一个文本编辑软件中写完程序之后,将程序部分COPY至剪贴板,然后运行ActionClip将之转化,然后到flash中将之PASTE便可。这个工具很小巧,在闪光地带(http:/zippy.yeah.net)有一个更好一点的工具 Flash Actionscript Tool Beta2注册版下载,支持所有的FLASH命令,可自动生成一些简单的程序。

问:如何让动画放完后自动关闭?
答:在最后一桢的ACTION里选FSCOMMOND一项,然后在右边选中QUIT,便可!
鱼溺水而亡,是为了让大海能够记住他~
62楼
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删帖    删帖    |   
82622206

田鼠

中级会员

将军

贴子 1814

精华 3

积分 1061

信用 0

竞猜 0

魅力 188

威望 0

现金 70 CZB

银行 0 CZB

黄金 0

比特币 0

注册时间 2005-06-01

发表于:2005-12-06 08:12:14   |  显示全部帖子   |  转账至  82622206
Debug-PC之开山老祖

Debug 原意是杀虫子。这里是机器调试工具。   
  其实,Debug的由来,还有一则趣闻,在早期美国的一计算机房中,科学家正在紧张的工作。同时,许多台大型的计算机也在不停的运行着。大概是由于,机器过热,引来许的小虫子,以至于,计算机无法正常运行。科学们,只好停下来,捉虫子...虫子捉完了,计算机运行也正常了,后来,这个名词就沿用至今了....   
虽然,现在好的软件越来越多了,但是有些,我们只需动手,用Debug就可解决,且快而好!接下来,我们就一起学习Debug在各方面的运用吧!(在杀毒、加解密、系统...)下面我和大家一起学习一些,Debug的用法,虽然,现在好的软件越来越多了,但是有些,我们只需动手,用Debug就可解决,且快而好!   

Debug常用命令集   
   
名称 解释 格式   
a (Assemble) 逐行汇编 a [address]   
c (Compare) 比较两内存块 c range address   
d (Dump) 内存16进制显示 d [address]或 d [range]   
e (Enter) 修改内存字节 e address
       
    f (fin) 预置一段内存 f range list   
    g (Go) 执行程序 g [=address][address...]   
    h (Hexavithmetic) 制算术运算 h value value   
    i (Input) 从指定端口地址输入 i pataddress   
    l (Load) 读盘 l [address [driver seetor>   
    m (Move) 内存块传送 m range address   
    n (Name) 置文件名  n filespec [filespec...]   
    o (Output) 从指定端口地址输出 o portadress byte   
    q (Quit) 结束  q   
    r (Register) 显示和修改寄存器 r [register name]   
    s (Search) 查找字节串  s range list   
    t (Trace) 跟踪执行  t [=address] [value]   
    u (Unassemble) 反汇编 u [address ]或range   
    w (Write) 存盘  w [address[driver sector secnum>   
    ? 联机帮助 ?   

    debug小汇编a命令   

    debug小汇编a命令是一个很有用的功能,许多的小程序都要他来做。   

    编一些小程序比汇编要来得方便,快洁。   
    在Debug中,中断是非常有用的,首先,让我们先了解一下中断。   
      所谓中断,其实,就是,当你做某事时,有人过来找你有其他事,你先放下手中的事(计算机中,称为保护现场)   
    ,再去与叫你的那个人办事去,等完了,你又回,接着做刚才的事。这是个很通俗的讲法。   
      计算机在运行时,也会出现这种情况,我们叫之中断。   
      下面是他的一些常用中断向量的入口值详解:(记住哦,很用的...呵呵)   



    IBM PC 中断 int10   
    ooH 屏幕方式设置   

    入口:AH=0,AL=显示方式代码(0--6)   
       0:40*25 黑白     
       1:40*25 彩色   
       2:80*25 黑白   
       3:80*25 彩色文本   
       4:320*200 彩色   
       5:320*200 黑白   
       6:640*200 黑白图形模式   
       7:80*25 单色字符(单色显示器)    

    0BH 色彩设置   
    入口:AH=0B,BL=0 设背景色,BH=0--15  BL=1 设调色码,BH=0--1   
    0CH 写图形点   
    入口:AH=0C,CX:DX=列号:行号,AL=颜色   
    ODH 读图形点   
    入口:AH=0D,CX:DX=列号:行号   
    返回:AL=颜色   
    0EH 在当前页、当前光标处写字符   
    入口:AH=0E,AL=字符的ASCII码,BL=前景色   
    OFH 显示器状态   
    入口:AH=0F   
    返回:AL=当前显示器方式,AH=屏幕列数,BH=当前页号   

    01H 光标设置   
    入口:AH=1,CH=光标起始行号(00--0C),CL=光标结束行号(00--0C)   
    注:CH > CL   
    02H 光标定位   
    入口:AH=2,BH=页号,DH:DL=起始行:列   
    03H 读光标位置   
    入口:AH=3,BH=页号。   
    返回:DH:DL=起始行:列   
    06H 窗口上卷   
    入品:AH=6,AL=窗口上卷行数,CH:CL-DH:DL 窗口坐标   
    注:AL=0 卷动整个窗口   
    07H 窗口下卷   
    入口:AH=7,AL=窗口下卷行数,CH:CL-DH:DL 窗口坐标   
    08H 读当前光标处字符和属性   
    入口:AH=8,BH=页号。   
    返回:AH:AL=字符的颜色:字符的ASCII码   
    注:颜色代码见下对照表   
    09H:在当前光标处写字符和属性   
    注:光标不下移   
    入口:AH=9,BH=页号,BL:AL=字符的颜色:字符的ASCII码,CX=重复次数   
    1 2 3 4 5 6 7 8   
    BL R G B I R G B   
    闪烁 字符底色 加亮 字符颜色   

    中断向量号表   

    中断号 解释 中断号 解释   
    0 除数为0错 19 引导装入程序   
    1 音步中断 1A 日时调用   
    2 不可屏蔽中断NMI 1B 键盘阻断时得到控制权   
    3 断电中断(CCH) 1C 时钟中断时得到控制权   
    4 溢出中断 1D 指向CRT初始参数表   
    5 屏幕打印中断 1E 指向盒带参数表   
    6-7 保留 1F 1KB图形模式   
    8 计时器中断(18.2秒) 20 结束DOS程序   
    9 键盘中断 21 DOS功能调用   
    A-D 保留 22 结束地址(建义用EXEC)   
    E 软盘机中断 23 DOS Crtl-Break退出地址   
    F 保留 24 DOS致命错向量   
    10 屏幕I/O调用 25 DOS绝对磁盘读   
    11 设备检查调用 26 DOS绝对磁盘写   
    12 存储器检查调用 27 结束程序并驻留(建义用31h)   
    13 软盘机I/O调用 28-3F DOS保留   
    14 RS-233I/O调用 40-7F 未用   
    15 盒带机I/O调用 80-85 BASIC保留   
    16 键盘I/O调用 86-F0 BASIC解释程序用   
    17 打印机I/O调用 F1-FF 未用   
    18 ROM-BASIC入口   


    指令名详解   
    call 指令(过程调用)(控制指令-长转移)   

    详解:   

    段内直接调用   

    段内间接调用(寄存器)   

    段内间接调用(存储器)   

    段间直接调用   

    段间间接调用   

    指令名   
    jmp 指令(无条件转移指令)(控制指令-长转移)   

    详解:   
    段内直接跳转   

    短段内直接跳转   

    段内间接跳转(寄存器)   

    段内间接跳转(存储器)   

    段间直接跳转   

    段间间接跳转   

    指令名   
    ret 指令(过程返回)(控制指令-长转移)   

    详解:   

    段内返回   

    段内返回立即数加于sp   

    段间返回   

    段间返回立即数加于sp   

    na/jnbe 指令(控制指令-短转移)   不小于或不等于时转移   

    jae/jnb 指令 (控制指令-短转移)   大于或等于时转移   

    jb/jnae 指令 (控制指令-短转移)   小于转移   

    jbe/jna 指令 (控制指令-短转移)   小于或等 于转移   

    jg/jnle 指令(控制指令-短转移)   大于转移   

    jge/jnl 指令 (控制指令-短转移)   大于或等于转移   

    jl/jnge 指令 (控制指令-短转移)   小于转移   

    jle/jng 指令 (控制指令-短转移)   小于或等 于转移   

    je/jz 指令 (控制指令-短转移)   等于转移   

    jne/jnz 指令 (控制指令-短转移)   不等于转移   

    jc 指令 (控制指令-短转移)   有进位时转移   

    jnc 指令 (控制指令-短转移)   列进位时转移     
    jno 指令 (控制指令-短转移)   不溢出时转移   
    jnp/jpo 指令 (控制指令-短转移)   奇偶性为奇数时转移   

    jns 指令 (控制指令-短转移)   符号位为"0"转移   

    jo 指令 (控制指令-短转移)   溢出转移   

    jp/jpe 指令 (控制指令-短转移)   奇偶性为偶数时转移   

    js 指令 (控制指令-短转移)   符号位为"1"时转移   

    loop 指令 (循环控制指令-短转移)   cx 不为0时循环   

    loope/loopz 指令 (循环控制指令-短转移)   cx 不为0且标志 z=1 时循环   
        
    loopne/loopnz 指令 (循环控制指令-短转移)   cx 不为0且标志 z=0 时循环   

    jcxz 指令 (循环控制指令-短转移)   cx 为0时转移   

    ★int 指令 (中断指令)   中断指令(后详解)   

    into 指令 (中断指令)   溢出中断   

    iret 指令 (中断指令)   中断返回   


    指令名   
    shl 指令(逻辑左移)   
    sal 指令(算术左移)   
    shr 指令(逻辑右移)   
    sar 指令(算术右移) 寄存器,1   
    rol 指令(循环左移) 寄存器,cl   
    ror 指令(循环右移) 存储器,1   
    rcl 指令(通过进位的循环左移)存储器,cl   
    rcr 指令(通过进位的循环右移)(逻辑运算)   


    not 指令(取反运算)寄存器求反   

    (逻辑运算)存储器求反   

    and 指令(与运算) (逻辑运算)   
        
    寄存器 and 寄存器 寄存器   
    寄存器 and 存储器 寄存器   

    存储器 and 寄存器 存储器   

    立即数 and 存储器 存储器   

    立即数 and 累加器 累加器   

    or 指令(或运算)(逻辑运算)   

    寄存器 or 寄存器 寄存器   
    寄存器 or 存储器 寄存器   

    存储器 or 寄存器 存储器   

    立即数 or 存储器 存储器   

    立即数 or 累加器 累加器   

    test 指令(测试) (逻辑运算)   
        
    寄存器 test 寄存器    
    寄存器 test 存储器   
    寄存器 test 立即数   
    存储器 test 立即数   
    累加器 test 立即数   
            
    movs 指令(串传送)(字符串操作指令)   
    单个传送   
    重复传送   
            
    cmps 指令(串比较) (字符串操作指令)   
    单个比较   
    重复比较   
            
    scas 指令(串扫描)(字符串操作指令)   
    单个搜索   
    重复搜索   
            
    lods 指令(装入串)   
    (字符串操作指令)   
    单个装载   
    重复装载   
            
    stos 指令(保存串) (字符串操作指令)   
    单个存储   
    重复存储   

    mov 指令(传送字或字节)(数据传送命令)    
    寄存器与寄存器间传送   
    存储器与寄存器间传送   
    立即数传送给存储器   
    立即数传送给寄存器   
    存储器传送给累加器   
    累加器传送存储器   
    寄存器传送给段寄存器   
    存储器传送给段寄存器   
    段寄存器传送给寄存器   
    段寄存器传送给存储存器   
            
    pop 指令(把字弹出堆栈) (数据传送命令)   

    push 指令(把字压入堆栈)     
    存储器   
    寄存器   
    段寄器        
    xchg 指令(交换字或字节) (数据传送命令)     
    寄存器与寄存器交换   
    存储器与寄存器交换   
    寄存器与累加器交换   
          
    in 指令(端口输入) (数据传送命令)   
    直接输入   
    间接输入   
            
    out 指令(端口输出) (数据传送指令)     
    直接输出   
    间接输出   
            
    add 指令(加法)(算术指令)   
    adc 指令(带进位加法)     
    寄存器+寄存器 寄存器   
    寄存器+存储器 寄存器   
    存储器+寄存器 存储器   
    立即数+存储器 存储器   
    立即数+累加器 累加器   
            
    inc 指令(加1)(算术指令)     
    存储器增量   
    寄存器增量   
            
    sub 指令(减法) (算术指令)   
    sbb 指令(带借位减法)     
    寄存器-寄存器 寄存器   
    寄存器-存储器 寄存器   
    存储器-寄存器 存储器   
    立即数-存储器 存储器   
    立即数-累加器 累加器   
            
    dec 指令(减1)(算术指令)     
    存储器减量   
    寄存器减量   
            
    nec 指令(求反,以0减之)     
    寄存器求补   
    存储器求补   
            
    cmp 指令(比较)(算术指令)     
    寄存器与寄存器比较   
    寄存器与存储器比较   
    寄存器与立即数比较   
    存储器与立即数比较   
    累加器与立即数比较   
            
    mul 指令(无符号乘法) (算术指令)   
    imul 指令(整数乘法)     
    与8位寄存器相乘   
    与16位寄存器相乘   
    与8位存储单元相乘   
    与16位存储单元相乘   
            
    div 指令(无符号除法)(算术指令)   
    idiv 指令(整数除法)     
    被8位寄存器除   
    被16位寄存器除   
    被8位存储单元除   
    被16位存储单元除   



    DEBUG主要命令   

    DEBUG是为汇编语言设计的一种高度工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。   
    一、DEBUG程序的调用   
    在DOS的提示符下,可键入命令:   
    C:\DEBUG [D:][PATH][FILENAME[.EXT>[PARM1][PARM2]   
    其中,文件名是被调试文件的名字。如用户键入文件,则DEBUG将指定的文件装入存储器中,用户可对其进行调试。如果未键入文件名,则用户可以用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试。命令中的D指定驱动器PATH为路径,PARM1和PARM2则为运行被调试文件时所需要的命令参数。   
    在DEBUG程序调入后,将出现提示符,此时就可用DEBUG命令来调试程序。   
    二、DEBUG的主要命令   
    1、显示存储单元的命令D(DUMP),格式为:   
    _D[address]或_D[range]   
    例如,按指定范围显示存储单元内容的方法为:   
    -d100 120   
    18E4:0100 c7 06 04 02 38 01 c7 06-06 02 00 02 c7 06 08 02 G...8.G.....G...   
    18E$:0110 02 02 bb 04 02 e8 02 00-CD 20 50 51 56 57 8B 37 ..;..h..M PQVW.   
    7   
    18E4:0120 8B   
    其中0100至0120是DEBUG显示的单元内容,左边用十六进制表示每个字节,右边用ASCII字符表示每个字节,·表示不可显示的字符。这里没有指定段地址,D命令自动显示DS段的内容。如果只指定首地址,则显示从首地址开始的80个字节的内容。如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。   
    2、修改存储单元内容的命令有两种。   
    ·输入命令E(ENTER),有两种格式如下:第一种格式可以用给定的内容表来替代指定范围的存储单元内容。命令格式为:   
    -E address
         
      例如,-E DS:100 F3'XYZ'8D   
      其中F3,'X','Y','Z'和各占一个字节,该命令可以用这五个字节来替代存储单元DS:0100到0104的原先的内容。   
      第二种格式则是采用逐个单元相继修改的方法。命令格式为:   
      -E address   
      例如,-E DS:100   
      则可能显示为:   
      18E4:0100 89.-   
      如果需要把该单元的内容修改为78,则用户可以直接键入78,再按"空格"键可接着显示下一个单元的内容,如下:   
      18E4:0100 89.78 1B.-   
      这样,用户可以不断修改相继单元的内容,直到用ENTER键结束该命令为止。   
      ·填写命令F(FILL),其格式为:   
      -F range list   
      例如:-F 4BA:0100 5 F3'XYZ'8D   
      使04BA:0100~0104单元包含指定的五个字节的内容。如果list中的字节数超过指定的范围,则忽略超过的项;如果list的字节数小于指定的范围,则重复使用list填入,直到填满指定的所有单元为止。   
      3)检查和修改寄存器内容的命令R(register),它有三种格式如下:   
      ·显示CPU内所有寄存器内容和标志位状态,其格式为:   
      -R   
      例如,-r   
      AX=0000 BX=0000 CX=010A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000   
      DS=18E4 ES=18E4 SS=18E4 CS=18E4 IP=0100 NV UP DI PL NZ NA PO NC   
      18E4:0100 C70604023801 MOV WORD PTR [0204],0138 DS:0204=0000   
      ·显示和修改某个寄存器内容,其格式为:   
      -R register name   
      例如,键入   
      -R AX   
      系统将响应如下:   
      AX F1F4   
      :   
      即AX寄存器的当前内容为F1F4,如不修改则按ENTER键,否则,可键入欲修改的内容,如:   

      -R bx   
      BX 0369   
      :059F   
      则把BX寄存器的内容修改为059F。   
      ·显示和修改标志位状态,命令格式为:   
      -RF系统将响应,如:   
      OV DN EI NG ZR AC PE CY-   
      此时,如不修改其内容可按ENTER键,否则,可键入欲修改的内容,如:   
      OV DN EI NG ZR AC PE CY-PONZDINV   
      即可,可见键入的顺序可以是任意的。   
      4)运行命令G,其格式为:   
      -G[=address1][address2[address3…>   
      其中,地址1指定了运行的起始地址,如不指定则从当前的CS:IP开始运行。后面的地址均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。   
      5)跟踪命令T(Trace),有两种格式:   
      ·逐条指令跟踪   
      -T [=address]   
      从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值。如未指定地址则从当前的CS:IP开始执行。   
      ·多条指令跟踪   
      -T [=address][value]   
      从指定地址起执行n条指令后停下来,n由value指定。   
      6)汇编命令A(Assemble),其格式为:   
      -A[address]   
      该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。必须注意:DEBUG把键入的数字均看成十六进制数,所以如要键入十进制数,则其后应加以说明,如100D。   
      7)反汇编命令U(Unassemble)有两种格式。   
      ·从指定地址开始,反汇编32个字节,其格式为:   
      -U[address]   
      例如:   
      -u100   
      18E4:0100 C70604023801 MOV WORD PTR[0204],0138   
      18E4:0106 C70606020002 MOV WORD PTR[0206],0200   
      18E4:010C C70606020202 MOV WORD PTR[0208],0202   
      18E4:0112 BBO4O2 MOV BX,0204   
      18E4:0115 E80200 CALL 011A   
      18E4:0118 CD20 INT 20   
      18E4:011A 50 PUSH AX   
      18E4:011B 51 PUSH CX   
      18E4:011C 56 PUSH SI   
      18E4:011D 57 PUSH DI   
      18E4:011E 8B37 MOV SI,[BX]   
      如果地址被省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。   
      ·对指定范围内的存储单元进行反汇编,格式为:   
      -U[range]   
      例如:   
      -u100 10c   
      18E4:0100 C70604023801 MOV WORD PTR[0204],0138   
      18E4:0106 C70606020002 MOV WORD PTR[0206],0200   
      18E4:010C C70606020202 MOV WORD PTR[0208],0202   
      或   
      -u100 112   
      18E4:0100 C70604023801 MOV WORD PTR[0204],0138   
      18E4:0106 C70606020002 MOV WORD PTR[0206],0200   
      18E4:010C C70606020202 MOV WORD PTR[0208],0202   

      可见这两种格式是等效的。   
      8)命名命令N(Name),其格式为:   
      -N filespecs [filespecs]   
      命令把两个文件标识符格式化在CS:5CH和CS:6CH的两个文件控制块中,以便在其后用L或W命令把文件装入存盘。filespecs的格式可以是:   
      [d:][path] filename[.ext]   
      例如,   
      -N myprog   
      -L   
      -   
      可把文件myprog装入存储器。   
      9)装入命令(Load),有两种功能。   
      ·把磁盘上指定扇区范围的内容装入到存储器从指定地址开始的区域中。其格式为:   
      -L[address[drive sector sector]   
      ·装入指定文件,其格式为:   
      -L[address]   
      此命令装入已在CS:5CH中格式化了文件控制块所指定的文件。如未指定地址,则装入CS:0100开始的存储区中。   
      10)写命令W(Write),有两种功能。   
      ·把数据写入磁盘的指定扇区。其格式为:   
      -W address drive sector sector   
      ·把数据写入指定的文件中。其格式为:   
      -W[address]   
      此命令把指定的存储区中的数据写入由CS:5CH处的文件控制块所指定的文件中。如未指定地址则数据从CS:0100开始。要写入文件的字节数应先放入BX和CX中。   
      11)退出DEBUG命令Q(Quit),其格式为:   
      -Q   
      它退出DEBUG,返回DOS。本命令并无存盘功能,如需存盘应先使用W命令。   

      问题:初学者问一个低级问题,执行debug-a后,如果有一行输入错误,如何更改这一行?   

      回答:   
      加入进行如下输入:   
      D:\PWIN95\Desktop>debug   
      -a   
      2129:0100movax,200   
      2129:0103movbx,200   
      2129:0106movcx,200   
      2129:0109   
      此时,发现movbx,200一句错误,应为movbx,20,可以敲回车返回"-"状态,然后输入:   
      -a103   
      2129:0103movbx,20   
      如果多或者少若干行,不必重新输入,可以用M命令移动后面的程序来去掉或者增加程序空间
鱼溺水而亡,是为了让大海能够记住他~
63楼
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删帖    删帖    |   
82622206

田鼠

中级会员

将军

贴子 1814

精华 3

积分 1061

信用 0

竞猜 0

魅力 188

威望 0

现金 70 CZB

银行 0 CZB

黄金 0

比特币 0

注册时间 2005-06-01

发表于:2005-12-06 08:12:04   |  显示全部帖子   |  转账至  82622206
DEBUG是为汇编语言设计的一种高度工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
一、DEBUG程序的调用
在DOS的提示符下,可键入命令:
C:\DEBUG [D:][PATH][FILENAME[.EXT]][PARM1][PARM2]
其中,文件名是被调试文件的名字。如用户键入文件,则DEBUG将指定的文件装入存储器中,用户可对其进行调试。如果未键入文件名,则用户可以用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试。命令中的D指定驱动器PATH为路径,PARM1和PARM2则为运行被调试文件时所需要的命令参数。
在DEBUG程序调入后,将出现提示符,此时就可用DEBUG命令来调试程序。
二、DEBUG的主要命令
1、显示存储单元的命令D(DUMP),格式为:
_D[address]或_D[range]
例如,按指定范围显示存储单元内容的方法为:
-d100 120
18E4:0100 c7 06 04 02 38 01 c7 06-06 02 00 02 c7 06 08 02 G...8.G.....G...
18E$:0110 02 02 bb 04 02 e8 02 00-CD 20 50 51 56 57 8B 37 ..;..h..M PQVW.
7
18E4:0120 8B
其中0100至0120是DEBUG显示的单元内容,左边用十六进制表示每个字节,右边用ASCII字符表示每个字节,·表示不可显示的字符。这里没有指定段地址,D命令自动显示DS段的内容。如果只指定首地址,则显示从首地址开始的80个字节的内容。如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。
2、修改存储单元内容的命令有两种。
·输入命令E(ENTER),有两种格式如下:第一种格式可以用给定的内容表来替代指定范围的存储单元内容。命令格式为:
-E address

    例如,-E DS:100 F3'XYZ'8D
    其中F3,'X','Y','Z'和各占一个字节,该命令可以用这五个字节来替代存储单元DS:0100到0104的原先的内容。
    第二种格式则是采用逐个单元相继修改的方法。命令格式为:
    -E address
    例如,-E DS:100
    则可能显示为:
    18E4:0100 89.-
    如果需要把该单元的内容修改为78,则用户可以直接键入78,再按"空格"键可接着显示下一个单元的内容,如下:
    18E4:0100 89.78 1B.-
    这样,用户可以不断修改相继单元的内容,直到用ENTER键结束该命令为止。
    ·填写命令F(FILL),其格式为:
    -F range list
    例如:-F 4BA:0100 5 F3'XYZ'8D
    使04BA:0100~0104单元包含指定的五个字节的内容。如果list中的字节数超过指定的范围,则忽略超过的项;如果list的字节数小于指定的范围,则重复使用list填入,直到填满指定的所有单元为止。
    3)检查和修改寄存器内容的命令R(register),它有三种格式如下:
    ·显示CPU内所有寄存器内容和标志位状态,其格式为:
    -R
    例如,-r
    AX=0000 BX=0000 CX=010A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
    DS=18E4 ES=18E4 SS=18E4 CS=18E4 IP=0100 NV UP DI PL NZ NA PO NC
    18E4:0100 C70604023801 MOV WORD PTR [0204],0138 DS:0204=0000
    ·显示和修改某个寄存器内容,其格式为:
    -R register name
    例如,键入
    -R AX
    系统将响应如下:
    AX F1F4

    即AX寄存器的当前内容为F1F4,如不修改则按ENTER键,否则,可键入欲修改的内容,如:

    -R bx
    BX 0369
    :059F
    则把BX寄存器的内容修改为059F。
    ·显示和修改标志位状态,命令格式为:
    -RF系统将响应,如:
    OV DN EI NG ZR AC PE CY-
    此时,如不修改其内容可按ENTER键,否则,可键入欲修改的内容,如:
    OV DN EI NG ZR AC PE CY-PONZDINV
    即可,可见键入的顺序可以是任意的。
    4)运行命令G,其格式为:
    -G[=address1][address2[address3…]]
    其中,地址1指定了运行的起始地址,如不指定则从当前的CS:IP开始运行。后面的地址均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。
    5)跟踪命令T(Trace),有两种格式:
    ·逐条指令跟踪
    -T [=address]
    从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值。如未指定地址则从当前的CS:IP开始执行。
    ·多条指令跟踪
    -T [=address][value]
    从指定地址起执行n条指令后停下来,n由value指定。
    6)汇编命令A(Assemble),其格式为:
    -A[address]
    该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。必须注意:DEBUG把键入的数字均看成十六进制数,所以如要键入十进制数,则其后应加以说明,如100D。
    7)反汇编命令U(Unassemble)有两种格式。
    ·从指定地址开始,反汇编32个字节,其格式为:
    -U[address]
    例如:
    -u100
    18E4:0100 C70604023801 MOV WORD PTR[0204],0138
    18E4:0106 C70606020002 MOV WORD PTR[0206],0200
    18E4:010C C70606020202 MOV WORD PTR[0208],0202
    18E4:0112 BBO4O2 MOV BX,0204
    18E4:0115 E80200 CALL 011A
    18E4:0118 CD20 INT 20
    18E4:011A 50 PUSH AX
    18E4:011B 51 PUSH CX
    18E4:011C 56 PUSH SI
    18E4:011D 57 PUSH DI
    18E4:011E 8B37 MOV SI,[BX]
    如果地址被省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。
    ·对指定范围内的存储单元进行反汇编,格式为:
    -U[range]
    例如:
    -u100 10c
    18E4:0100 C70604023801 MOV WORD PTR[0204],0138
    18E4:0106 C70606020002 MOV WORD PTR[0206],0200
    18E4:010C C70606020202 MOV WORD PTR[0208],0202

    -u100 112
    18E4:0100 C70604023801 MOV WORD PTR[0204],0138
    18E4:0106 C70606020002 MOV WORD PTR[0206],0200
    18E4:010C C70606020202 MOV WORD PTR[0208],0202

    可见这两种格式是等效的。
    8)命名命令N(Name),其格式为:
    -N filespecs [filespecs]
    命令把两个文件标识符格式化在CS:5CH和CS:6CH的两个文件控制块中,以便在其后用L或W命令把文件装入存盘。filespecs的格式可以是:
    [d:][path] filename[.ext]
    例如,
    -N myprog
    -L
    -
    可把文件myprog装入存储器。

    2004-5-26 09:44                 

    IceMe
    正式会员





    积分 170
    发贴 305
    注册 2004-3-15
    来自 紫色星云
    状态 离线  9)装入命令(Load),有两种功能。
    ·把磁盘上指定扇区范围的内容装入到存储器从指定地址开始的区域中。其格式为:
    -L[address[drive sector sector]
    ·装入指定文件,其格式为:
    -L[address]
    此命令装入已在CS:5CH中格式化了文件控制块所指定的文件。如未指定地址,则装入CS:0100开始的存储区中。
    10)写命令W(Write),有两种功能。
    ·把数据写入磁盘的指定扇区。其格式为:
    -W address drive sector sector
    ·把数据写入指定的文件中。其格式为:
    -W[address]
    此命令把指定的存储区中的数据写入由CS:5CH处的文件控制块所指定的文件中。如未指定地址则数据从CS:0100开始。要写入文件的字节数应先放入BX和CX中。
    11)退出DEBUG命令Q(Quit),其格式为:
    -Q
    它退出DEBUG,返回DOS。本命令并无存盘功能,如需存盘应先使用W命令。

    问题:初学者问一个低级问题,执行debug-a后,如果有一行输入错误,如何更改这一行?

    回答:
    加入进行如下输入:
    D:\PWIN95\Desktop>debug
    -a
    2129:0100movax,200
    2129:0103movbx,200
    2129:0106movcx,200
    2129:0109
    此时,发现movbx,200一句错误,应为movbx,20,可以敲回车返回"-"状态,然后输入:
    -a103
    2129:0103movbx,20
    如果多或者少若干行,不必重新输入,可以用M命令移动后面的程序来去掉或者增加程序空间。

    如何除错和汇编你的第一个PC x86汇编语言程序呢?

    以下这些简单的解释可以让一个汇编语言新手使用DEBUG:

    0)在使用时,如何快速获得debug的使用帮助呢。
    1)让我们开始工作吧,例如:显示BIOS的日期。
    2)在你的电脑的COMMANG.COM文件里搜寻"IBM"这几个字符。
    3) 一位十六进制数的运算。
    4) 检查 x86寄存器内容。
    5)我们来编写我们的第一个用机械语言编写的程序-打印一个字符。
    6) 我们现在用汇编语言指令来做和例5一样的事情。
    7)现在,我们不但要编写一个汇编程序,而且我们还要把它存盘。
    8) 现在,我们试一试查看一个已经编好的程序。
    9)你可以用DEBUG的计算功能计算程序的长度。
    10)另一种显示在屏幕上字符串的方法。
    11)让我们试一试反复输出。
    12)我们现在把两个程序连接起来。
    13) 让我们逐步运行这个刚刚修补的程序。
    14)如果一开始的命令不是跳转命令,那么可能就要用这种方法了。

    以下所有的命令都是可以运行在WIN9x的MS-DOS方式下的。
    进入MS-DOS的方式有:
    [开始][程序][MS-DOS方式]

    [开始][运行][打开]COMMAND[确定]

    或者你可以双击它:
    C:\Windows\Command.com

    0)在使用时,如何快速获得debug的使用帮助呢
    以下PROMPT>表示目录提示符:一般为:C:\WINDOWS\COMMAND\
    PROMPT> DEBUG /?<按回车press the enter key now>
    怎样?出错了吧。显示如下
    C:\WINDOWS>DEBUG/?
    Runs Debug, a program testing and editing tool.

    DEBUG [[drive:][path]filename [testfile-parameters]]

    [drive:][path]filename Specifies the file you want to test.
    testfile-parameters Specifies command-line information required by
    the file you want to test.

    After Debug starts, type ? to display a list of debugging commands.
    因为错了所以它给你显示一些提示。留意到最后一句了吗?


    现在我们再来试一试:
    PROMPT> DEBUG<按回车> (注意, DEBUG程序的命令是在一条横线"-"后出现的。)
    -?<在出现的横线后面输入?再回车> (下面的内容是按字母顺序排列的)
    (注意:Note: Don't type the dash or comments -- just the ?)
    显示如下,但是没有中文的哦,中文是我加上去的。


    汇编assemble A [address]
    比较compare C range address
    倾倒dump D [range]
    进入enter E address

      填充fill F range list
      进行go G [=address] [addresses]
      十六进制hex H value1 value2
      输入input I port
      装载load L [address] [drive] [firstsector] [number]
      移动move M range address
      命名name N [pathname] [arglist]
      输出output O port byte
      进行proceed P [=address] [number]
      离开quit Q
      纪录register R [register]
      搜寻search S range list
      描述trace T [=address] [value]
      反汇编unassemble U [range]
      写write W [address] [drive] [firstsector] [number]
      分配扩展内存allocate expanded memory XA [#pages]
      释放扩展内存deallocate expanded memory XD [handle]
      map expanded memory pages XM [Lpage] [Ppage] [handle]
      display expanded memory status XS
      -q<按回车> (这是退出DEBUG回到DOS状态)This quits out of debug, returning to the DOS prompt)

      Tested examples below walk the user thru the following debug examples:
      在下面的例子里读者必须明白以下几条DEBUG命令。
      -D 显示一定范围内存的内容Display the contents of an area of memory
      -Q 退出DEBUG程序Quit the debug program
      -S 搜寻Search for whatever
      -H 十六进制的运算Hex arithmatic
      -R 显示或者改变一个或者多个寄存器的内容Display or change the contents of one or more registers
      -E 输入数据进入内存,在一个详细的地址里Enter data into memory, beginning at a specific location
      -G 运行现在在内存里的程序。Go run the executable program in memory
      -U 反汇编,把我们不认识的机械代码变为我们可以认识汇编语言符号Unassemble machine code into symbolic code
      -T 描述一条指令的用法。Trace the contents of one instruction
      -P 进行或者执行一个相关的指令Proceed, or execute a set of related instructions
      -A 编译,把汇编命令变为机械代码Assemble symbolic instructions into machine code
      -N 命名一个程序Name a program
      -W 把一个已经命名的程序写进磁盘Write the named program onto disk
      -L 把程序装载进内存Load the named program back into memory

      返回目录

      1)让我们开始工作吧,例如:显示BIOS的日期
      (以下PROMPT>表示目录提示符:一般为:C:\WINDOWS\COMMAND\)

      PROMPT> DEBUG<按回车>
      -D FFFF:0006 L 8<按回车> (显示 FFFFh, 偏移地址 6h, 长度 8 bytes)
      在作者的电脑上这里显示为 "1/10/96."
      译者的电脑显示" FFFF:0000 37 2F-30 36 2F 30 30 00 7/06/00."相信作者的电脑里也是用这种格式显示的。这里显示出来的是使用者BIOS的日期,有兴趣的话可以重新开机看看,注意开机时的显示。
      -Q<按回车> (退出DEBUG)

      思考:当只按DEBUG的时候,编辑的是什么?为什么可以找到BIOS的日期?(译者这里也不是很清楚所以请大家知道的也留言给斑竹,改正。译者认为可能是内存的真实物理地址。)

      返回目录

      2)在你的电脑的COMMANG.COM文件里搜寻"IBM"这几个字符
      下面的"C:\Win95\"是根据每不电脑不同的。像译者的电脑里就是"C:\WINDOWS"

      PROMPT> DEBUG C:\Win95\Command.com<按回车>
      -S 0 L FFFF "IBM"<按回车>(从0开始搜寻"IBM",搜寻FFFFh多个单元格)
      -Q<按回车> (退出DEBUG)

      以下是译者做的:

      C:\WINDOWS>DEBUG C:\WINDOWS\COMMAND.COM
      -S 0 L FFFF "IBM"
      -S 0 L FFFF "COMMAND"
      12A7:008D
      12A7:04F7
      12A7:3870
      12A7:38BE
      12A7:38DD
      -S 0 L FFFF "PATH"
      12A7:38AD
      12A7:CCB7
      12A7:CF55
      -S 0 L FFFF "COMSPEC"
      12A7:38D4
      12A7:3A4D
      12A7:CCC4
      -Q

      C:\WINDOWS>

      (注意:搜寻是要区分大小写的)
      (你可以看到上面是没有找到"IBM"的, 可以试一试"PATH" , "COMSPEC" , "COMMAND")
      (注意: 这种方法用在查找加密资料和已被删除的资料等方面时是十分有用的)

      返回目录

      3) 一位十六进制数的运算:

      PROMPT> DEBUG<按回车>
      -H 9 1<按回车> (加减两个十六进制的数, 9h+1h=Ah & 9h-1h=8h)
      结果是显示: 000A 0008
      -Q<按回车> (退出DEBUG)

      C:\WINDOWS>debug
      -h 9 1
      000A 0008
      -q
      C:\WINDOWS>

      返回目录

      4) 检查x86寄存器内容

      PROMPT> DEBUG<按回车>
      -R<按回车> (显示x86寄存器内容)
      -Q<按回车> (退出DEBUG)

      C:\WINDOWS>debug
      -R
      AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
      DS=127C ES=127C SS=127C CS=127C IP=0100 NV UP EI PL NZ NA PO NC
      127C:0100 043C ADD AL,3C
      -Q

      下面是对寄存器的简单介绍:

      数据存储器
      在本类中,一般讲的AH就是AX的前八位,AL就是AX的后八位,后面的以此类推。
      AX Accumulator;作为累加器,所以它是算术运算的主要寄存器。另外所有的I/O指令都使用这一寄存器与外部设备传送信息。
      BX Base register;可以作为通用寄存器使用,此外在计算存储器地址时,它经常用作基地址寄存器。
      CX Counting register;可以作为通用寄存器使用,此外在循环(LOOP)和串处理指令中作隐含的计数器。
      DX Data register;可以作为通用寄存器使用,一般在作双字长运算时,把DX和AX组合在一起存放一个双字长数,DX用来存放高位字。此外,对某些I/O操作,DX可用来存放I/O的端口地址。

      指针及变址寄存器
      BP Base pointers register ;机制指针寄存器
      SI Source index register ;堆栈指针寄存器
      DI Destiny index register ;目的变址寄存器
      SP Battery pointer register ;堆栈指针寄存器

      段寄存器
      CS Code segment register ;代码段寄存器,存放正在运行的程序指令
      DS Data segment register ;数据段寄存器,存放当前运行程序所用的数据
      SS Battery segment register ;堆栈段寄存器,定义了堆栈所在区域
      ES Extra segment register ;附加段寄存器,存放附加的数据,是一个辅助性的数据区,

      控制寄存器
      IP Next instruction pointer register;指令指针寄存器,它用来存放代码段中的偏移地址,在程序运行的过程中,它始终指向下一条指令的首地址,它与CS寄存器联用确定下一条指令的物理地址
      F Flag register;标志寄存器 "NV UP EI PL NZ NA PO NC"就是了,也有人称之为PSW Program Status Wold程序状态寄存器

      (这里有一点必须讲明白的现在在,其实从奔腾开始这些寄存器(除了所有段寄存器,标志寄存器 )都是32位的。并且加多了两个16位段寄存器FS,GS。dos下面看到这些寄存器是16位的。要看32位寄存器可以使用soft-ice。对于FS,GS的作用我也不是很清楚,希望有高手指点,谢谢。)

      返回目录

      2004-5-26 09:45                 

      IceMe
      正式会员





      积分 170
      发贴 305
      注册 2004-3-15
      来自 紫色星云
      状态 离线  5)我们来编写我们的第一个用机械语言编写的程序-打印一个字符
      (这里用机械语言的主要原因是考虑到有一些用户不懂汇编命令,现在就要让他有一个认识计算机程序实质是一些数字)

      PROMPT> DEBUG<按回车>
      -E 100<按回车> (在偏移地址为100的地方输入机械指令程序)
      B4<按空格>02<按空格> (在AX寄存器的前八位存入02)
      B2<按空格>41<按空格> (在DX寄存器的后八位存入41h,41h就是大写A的ASCII码,身边有ASCII表的朋友可以对着表改改数字试一试)
      CD<按空格>21<按空格> (当AH=02时这是DOS显示输出的中断号)
      CD<按空格>20<按回车> (退出DOS)
      -G<按回车> (程序运行,并在屏幕上显示出"A")
      程序运行完以后你将看到"Program terminated normally"(程序正常结束了).
      -U 100<按回车> (我们把它反汇编,就是把机械命令变为汇编语言指令)
      107F:0100 B402 MOV AH,02
      :0102 B2 MOV DL,41
      :0104 CD21 INT 21
      :0106 CD20 INT 20
      (下面会有一堆无用的东西)
      (对了,你的段地址可能与我的段地址CS=107F不同哦)
      -R<按回车> (让我们来看看寄存器的值; IP==100h, AX==0000h, DX==0000h)
      好极了,我们看到电脑又做好了准备下一次运行程序了。
      -T<按回车> (执行第一步操作... IP=>102h, AX=>0200h,指令指针寄存器指向下一条命令,AX的值被改变。
      -T<按回车> (执行第二步操作... IP=>104h, , DX=>0041h,指令指针寄存器指向下一条命令,DX的值被改变。
      -P<按回车> (继续执行 INT 21,IP=>106h, AX=>02h,)
      -P<按回车> (继续执行INT 20)
      -Q<按回车> (退出DEBUG)
      (注意:你必须小心使用"T".因为如果你在程序完结以后继续执行这条命令,因为我们无法预知下面的指令是什么,所以我们也无法预知它可能带来的后果)
      C:\WINDOWS>DEBUG
      -E 100
      127C:0100 B4.B4 02.02 B2.B2 41.41 CD.CD 21.21 CD.CD 20.20
      -G
      A
      Program terminated normally
      -U 100
      127C:0100 B402 MOV AH,02
      127C:0102 B241 MOV DL,41
      127C:0104 CD21 INT 21
      127C:0106 CD20 INT 20
      127C:0108 C706F1E30900 MOV WORD PTR [E3F1],0009
      127C:010E EB59 JMP 0169
      127C:0110 57 PUSH DI
      127C:0111 BFF1E3 MOV DI,E3F1
      127C:0114 8BDF MOV BX,DI
      127C:0116 06 PUSH ES
      127C:0117 0E PUSH CS
      127C:0118 07 POP ES
      127C:0119 32D2 XOR DL,DL
      127C:011B EB34 JMP 0151
      127C:011D 006B12 ADD [BP+DI+12],CH
      -R
      AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
      DS=127C ES=127C SS=127C CS=127C IP=0100 NV UP EI PL NZ NA PO NC
      127C:0100 B402 MOV AH,02
      -T

      AX=0200 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
      DS=127C ES=127C SS=127C CS=127C IP=0102 NV UP EI PL NZ NA PO NC
      127C:0102 B241 MOV DL,41
      -T

      AX=0200 BX=0000 CX=0000 DX=0041 SP=FFEE BP=0000 SI=0000 DI=0000
      DS=127C ES=127C SS=127C CS=127C IP=0104 NV UP EI PL NZ NA PO NC
      127C:0104 CD21 INT 21
      -P
      A
      AX=0241 BX=0000 CX=0000 DX=0041 SP=FFEE BP=0000 SI=0000 DI=0000
      DS=127C ES=127C SS=127C CS=127C IP=0106 NV UP EI PL NZ NA PO NC
      127C:0106 CD20 INT 20
      -P

      Program terminated normally
      -Q

      C:\WINDOWS>

      返回目录

      6) 我们现在用汇编语言指令来做和例5一样的事情

      PROMPT> DEBUG<按回车>
      -A 100<按回车> (在偏移地址为100的地方输入汇编语言程序)
      MOV AH,02<按回车> (选用DOS的02号功能调用,显示输出)
      MOV DL,<按回车> (在DX寄存器的后八位存入41h,41h就是大写A的ASCII码,身边有ASCII表的朋友可以对着表改改数字试一试)
      INT 21<按回车> (当AH=02时这是DOS显示输出的中断号,显示"A")
      INT 20<按回车> (退出DOS)
      <按回车> (结束汇编语言编程状态,回到DEBUG命令状态)
      -G =100<按回车> (运行程序,其实可以不要"=100"因为一般默认启始位置是100)
      -Q<按回车> (退出DEBUG)


      C:\WINDOWS>DEBUG
      -A 100
      127C:0100 MOV AH,02
      127C:0102 MOV DL,41
      127C:0104 INT 21
      127C:0106 INT 20
      127C:0108
      -G
      A
      Program terminated normally
      -Q

      返回目录

      7) 现在,我们不但要编写一个汇编程序,而且我们还要把它存盘
      (下面这个程序就要比原来的程序复杂一点了-显示输出:"ABC")

      PROMPT> DEBUG<按回车>(运行DEBUG程序;系统默认启始IP寄存器值为100h)
      -A 100<按回车> (用汇编语言编写一个程序,启始地址是100h)
      MOV AH,02<按回车> (选择DOS的02号功能调用, 显示输出)
      MOV DL,<按回车> (在DX寄存器的后八位存入41h,41h就是大写A的ASCII码)
      INT 21<按回车> (当AH=02时这是DOS显示输出的中断号,显示"A")
      MOV DL,42<按回车> (在DX寄存器的后八位存入41h,41h就是大写B的ASCII码)
      INT 21<按回车> (当AH=02时这是DOS显示输出的中断号,显示"B")
      MOV DL,43<按回车> (在DX寄存器的后八位存入41h,41h就是大写C的ASCII码)
      INT 21<按回车> (当AH=02时这是DOS显示输出的中断号,显示"C")
      INT 20<按回车> (程序结束,退出DEBUG)
      <按回车> (结束汇编命令输入,回到DEBUG命令输入)
      -R BX<按回车> (查看寄存器BX的值)
      :0000<按回车> (设置BX为0000h,这是程序的结尾地址是BX:CX)
      (注意,只要BX = 0000, 文件的大小就小于 < 64 Kb.)
      -R CX<按回车> (设置CX为Fh,这是程序的长度:16位)
      :0010<按回车> (现在我们可以把这个16字节的程序写入硬盘了)
      -N printabc.com<按回车> (将要存盘的程序命名)
      -W<按回车> (把这十六字节写到文件里面)
      -Q<按回车> (退出DEBUG)
      PROMPT> DIR printabc.com<按回车>
      这里将会报告这个文件的大小是16字节 (10h 字节).
      PROMPT> printabc.com<按回车>
      会马上在屏幕上打印出"ABC"

      C:\WINDOWS>DEBUG
      -A 100
      127C:0100 MOV AH,02
      127C:0102 MOV DL,41
      127C:0104 INT 21
      127C:0106 MOV DL,42
      127C:0108 INT 21
      127C:010A MOV DL,43
      127C:010C INT 21
      127C:010E INT 20
      127C:0110
      -R
      AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
      DS=127C ES=127C SS=127C CS=127C IP=0100 NV UP EI PL NZ NA PO NC
      127C:0100 B402 MOV AH,02
      -R BX
      BX 0000
      :
      -R CX
      CX 0000
      :0010
      -N PRINTABC.COM
      -W
      Writing 00010 bytes
      -Q
      C:\WINDOWS>DIR PRINTABC.COM
      Volume in drive C has no label
      Volume Serial Number is 28FB-70BA
      Directory of C:\WINDOWS
      PRINTABC COM 16 03-21-01 11:02 PRINTABC.COM
      1 file(s) 16 bytes
      0 dir(s) 557,711,360 bytes free
      C:\WINDOWS>PRINTABC
      ABC
      C:\WINDOWS>

      这里可以有人告诉我,为什么要存入是BX:CX代表程序长度吗?(写信给译者,谢谢)

      返回目录

      8) 现在,我们试一试查看一个已经编好的程序:

      PROMPT> DEBUG<按回车>(运行DEBUG程序在CS:IP = CS:0100h)
      -N printabc.com<按回车> (告诉电脑你想装载的程序名)
      -L<按回车> (装载那个名字的程序进入内存)
      -U 100 L 10<按回车> (从偏移地址100开始反汇编16位字节)
      -R<按回车> (现在看看寄存器里面的内容)
      注意:DEBUG本身是没有自动纪录文件大小的。
      -G (运行被命名的程序,打印"ABC")
      你将看到"ABC",然后是"Program terminated normally")

      C:\WINDOWS>DEBUG
      -N PRINTABC.COM
      -L
      -U 100 L 10
      12A4:0100 B402 MOV AH,02
      12A4:0102 B241 MOV DL,41
      12A4:0104 CD21 INT 21
      12A4:0106 B242 MOV DL,42
      12A4:0108 CD21 INT 21
      12A4:010A B243 MOV DL,43
      12A4:010C CD21 INT 21
      12A4:010E CD20 INT 20
      -R
      AX=0000 BX=0000 CX=0010 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
      DS=12A4 ES=12A4 SS=12A4 CS=12A4 IP=0100 NV UP EI PL NZ NA PO NC
      12A4:0100 B402 MOV AH,02
      -G
      ABC
      Program terminated normally

      返回目录

      2004-5-26 09:45                 

      IceMe
      正式会员





      积分 170
      发贴 305
      注册 2004-3-15
      来自 紫色星云
      状态 离线  9)你可以用DEBUG的计算功能计算程序的长度。

      一开始的时候你的程序初始地址是在0100h:
      107F:0100 MOV AH,02 <--这就是 100h
      你的程序的最后一行在010Eh:
      107F:010E INT 20 <--最后一行
      然后,最后一条命令的下一行的地址是0110h:
      107F:0110 <--这就是110h
      所以,从0110h里减去100h我们得到得长度是10h 字节.

      PROMPT> DEBUG<按回车>
      -H 110 100<按回车> (这条命令将运算110h+100h和110h-100h)
      0210 0010<按回车> (汇报 110h-100h=0010h; 16-byte 程序长度16位)
      -Q<按回车> (退出DEBUG)


      C:\WINDOWS>debug
      -H 110 100
      0210 0010
      -Q

      返回目录

      10)另一种显示在屏幕上字符串的方法

      注意:在你输入数据的时候,按"-"键将会可以让你回退一格。

      PROMPT> DEBUG<按回车>
      -E 200<按回车> (从偏移地址200开始。输入"Hello,World")
      48<按空格>65<按空格> (输入48h (H)和65h (e))
      6C<按空格>6C<按空格> (输入6Ch (l)和6Ch (l))
      6F<按空格>2C<按空格> (输入6Fh (o)和2Ch (,))
      57<按空格>6F<按空格> (输入57h (W)和6Fh (o))
      72<按空格>6C<按空格> (输入72h (r)和6Ch (l))
      64<按空格>24<按空格> (输入64h (d)和24h ($))
      <按回车> ("Hello,World" 已经输入完毕)
      -D 200<按回车> (显示你刚刚输入的内容:
      48 65 6C 6C 6F 2C 57 6F-72 6C 64 24 ... HELLO,WORLD$...)
      -A 100<按回车> (用汇编语言写一个新程序在IP-100h处开始)
      MOV AH,09<按回车> (选择DOS的09号功能调用,显示字符串)
      MOV DX,0200<按回车> (把输出地址(200h),放进寄存器)
      INT 21<按回车> (执行DOS功能调用,显示"Hello,World")
      INT 20<按回车> (退出程序回到DOS状态)
      <按回车> (结束汇编语言输入,回到DEBUG输入状态)
      -G<按回车> (从 CS:IP开始运行程序, 就是从107F:0100h开始执行程序)

      现在,我们可以把这个程序保存进一硬盘

      -D 100<按回车> (纪录:程序的起始点在100h)
      -D 200<按回车> (纪录:程序数据单元的结束点是在020Bh)
      -H 20B 100<按回车> (运算 20Bh-100h=10Bh;程序长度267字节)
      -R BX<按回车> (检查BX寄存器的值)
      :0000<按回车> (设置BX为0000h,程序的长度是BX:CX,实际上你可以把和CX写到一起,即实际长度为:0000010Bh,这样些的目的是使你可以计算更大的程序的长度)
      -R CX<按回车> (设置CX 为010Bh, 这就是这个程序的长度了)
      :010B<按回车> (现在你可以把这个108字节的程序写入硬盘了)
      -N printhw.com<按回车> (将要写入硬盘的程序命名)
      -W<按回车> (把这10Bh 即267个字节写入文件)
      -Q<按回车> (退出DEBUG)
      PROMPT> DIR printhw.com<按回车>
      将会汇报程序的长度是267字节(10Bh字节).
      PROMPT> printhw.com<按回车>
      运行这个程序,这将会在屏幕上显示出"Hello,World" :

      C:\WINDOWS>DEBUG
      -E 200
      127C:0200 2C.48 D5.65 BA.6C FF.6C FF.6F B8.2C 00.57 AE.6F
      127C:0208 CD.72 2F.6C 3C.64 00.24 C3.
      -D 200
      127C:0200 48 65 6C 6C 6F 2C 57 6F-72 6C 64 24 C3 A0 ED E3 Hello,World$
      127C:0210 0A C0 74 09 56 57 E8 84-21 5F 5E 73 0A B9 04 01 ..t.VW..!_^s
      127C:0220 FC 56 57 F3 A4 5F 5E C3-50 56 33 C9 33 DB AC E8 .VW.._^.PV3.
      127C:0230 C3 23 74 19 3C 0D 74 15-F6 C7 20 75 06 3A 06 1E .#t.<.t... u
      127C:0240 D4 74 0A 41 3C 22 75 E6-80 F7 20 EB E1 5E 58 C3 .t.A<"u... .
      127C:0250 A1 F3 D8 8B 36 F5 D8 C6-06 37 DA 00 C6 06 33 DA ....6....7..
      127C:0260 00 8B 36 F5 D8 8B 0E F3-D8 8B D6 E3 42 51 56 5B ..6.........
      127C:0270 2B DE 59 03 CB 8B D6 C6-06 D7 DC 00 E3 31 49 AC +.Y.........
      -A 100
      127C:0100 MOV AH,09
      127C:0102 MOV DX,0200
      127C:0105 INT 21
      127C:0107 INT 20
      127C:0109
      -G
      Hello,World
      Program terminated normally
      -D200
      127C:0200 48 65 6C 6C 6F 2C 57 6F-72 6C 64 24 C3 A0 ED E3 Hello,World$
      127C:0210 0A C0 74 09 56 57 E8 84-21 5F 5E 73 0A B9 04 01 ..t.VW..!_^s
      127C:0220 FC 56 57 F3 A4 5F 5E C3-50 56 33 C9 33 DB AC E8 .VW.._^.PV3.
      127C:0230 C3 23 74 19 3C 0D 74 15-F6 C7 20 75 06 3A 06 1E .#t.<.t... u
      127C:0240 D4 74 0A 41 3C 22 75 E6-80 F7 20 EB E1 5E 58 C3 .t.A<"u... .
      127C:0250 A1 F3 D8 8B 36 F5 D8 C6-06 37 DA 00 C6 06 33 DA ....6....7..
      27C:0260 00 8B 36 F5 D8 8B 0E F3-D8 8B D6 E3 42 51 56 5B ..6.........
      127C:0270 2B DE 59 03 CB 8B D6 C6-06 D7 DC 00 E3 31 49 AC +.Y.........
      -H 20B 100
      030B 010B
      -R BX
      BX 0000
      :
      -R CX
      CX 0000
      :010B
      -N PRINTHW.COM
      -W
      Writing 0010B bytes
      -Q
      C:\WINDOWS>DIR PRINTHW.COM
      Volume in drive C has no label
      Volume Serial Number is 28FB-70BA
      Directory of C:\WINDOWS
      PRINTHW COM 267 03-22-01 11:53 PRINTHW.COM
      1 file(s) 267 bytes
      0 dir(s) 555,089,920 bytes free

      返回目录

      11)让我们试一试反复输出:

      PROMPT> DEBUG<按回车>
      -A 100<按回车> (用汇编语言写一个新的程序,起始地址是100h)
      JMP 125<按回车> (从102h接跳到125h)
      <按回车> (结束输入汇编命令。译者注:这里是为了例12做准备)
      -E 102 'Hello World' 0d 0a '$'<按回车> (把字符串输入内存)
      -A 125<按回车> (从125h开始继续编写我们的汇编语言程序)
      MOV DX,0102<按回车> (把字符串的首地址(102h)放入DX寄存器)
      MOV CX,0005<按回车> (指定这条指令将被显示5次)
      MOV AH,09<按回车> (选择DOS的09号功能调用, 显示字符串)
      INT 21<按回车> (执行DOS的功能调用, 显示"Hello, World")
      DEC CX<按回车> (每次运行到这里CX都减去1)
      JCXZ 0134<按回车> (如果计数器CX=0,那么跳到地址0134h)
      JMP 012D<按回车> (其他情况下,即CX≠O时跳到012Dh)
      INT 20<按回车> (程序退出DOS状态)
      <按回车> (结束汇编语言程序输入,回到DEBUG)
      -U 100<按回车> (从地址100h 开始反汇编)
      -U<按回车> (继续执行反汇编指令,直至你看到INT 20)
      -H 0136 100<按回车> (运算程序长度为36h)
      -U 100 L 36<按回车> ( 从100h反汇编到136h ,来确认你的计算)
      -R BX<按回车> (查看寄存器BX的值)
      :0000<按回车> (设置BX为0000h)
      -R CX<按回车> (把CX 设置为36h, 这就是程序长度36字节)
      :0036<按回车> (现在你可以把这36字节写入文件了)
      -N printhw5.com<按回车>(命名我,我们要写入的文件名)
      -W<按回车> (把这36字节的内容写进新文件)
      -G<按回车> (运行程序,在屏幕上显示"Hello-World ")
      -Q<按回车> (退出DEBUG)
      PROMPT> DIR printhw5.com<按回车>
      将会汇报文件大小为54字节,换算为十六进制就是36h字节
      PROMPT> printhw5.com<按回车>
      将在屏幕上显示五次"Hello World"

      返回目录

      12)我们现在把两个程序连接起来。

      我们现在把printhw.com做为修补程序 写进printhw5.com, 新版本的printhw5 将先执行原来的printhw.com再执行原来的printhw5.com

      PROMPT> COPY printhw5.com printhw5.bak<按回车>
      首先,备份printhw5.com,以后可以用于比较
      PROMPT> DIR printhw5.com<按回车>
      现在,查看到得仍然是以前的54字节(36h 字节)
      PROMPT> DEBUG printhw5.com<按回车>
      -R<按回车> (现在查看仍然是BX:CX=0000 0036h bytes)
      -U 100<按回车> (查看到最后的是 EB 23 (JMP 0125))
      -H 100 36<按回车> (最后的指令是在 100h+36h=136h)
      -H 136 1<按回车> (下一个可用的存储器位置是136h+1h=137h)
      现在你拥有足够的资料,去修补那个程序
      -E 110<按回车> (把"Hello,World"输入内存)
      48<按空格>65<按空格> (输入48h (H)和65h (e))
      6C<按空格>6C<按空格> (输入6Ch (l)和6Ch (l))
      6F<按空格>2C<按空格> (输入6Fh (o)和2Ch (,))
      57<按空格>6F<按空格> (输入57h (W)和6Fh (o))
      72<按空格>6C<按空格> (输入72h (r)和6Ch (l))
      64<按空格>24<按空格> (输入64h (d)和24h ($))
      <按回车> (停止输入"Hello,World")
      -D 110<按回车> (显示更才输入内存的数据:
      48 65 6C 6C 6F 2C 57 6F-72 6C 64 24 ...HELLO,WORLD$...)
      -A 100<按回车> (在IP地址的(100h)开始夺取原来的程序的控制权,原来这里是"JMP 125")
      JMP 137<按回车> (代替原来运行的程序首先运行我们现在的修补程序)
      <按回车> (结束汇编命令输入,回到DEBUG命令输入)
      -A 137<按回车> (在下面的可用通奸编译这个修补程序)
      MOV AH,09<按回车> (选择DOS的09号功能调用,显示输出)
      MOV DX,110<按回车> (把我们要输出的字段的首地址(110h)给DX寄存器)
      INT 21<按回车> (执行DOS 的功能调用,显示"Hello,World")
      JMP 0125<按回车> (这里用跳转到原程序来代替退出到DOS命令(INT 20))
      <按回车> (结束汇编命令输入,回到DEBUG命令输入)

      -U 125<按回车> (确认一下源程序没有被我们误改了,如果无改了就马上退出DEBUG重新来过)
      -U 100 L 1<按回车> (确认已经使程序跳转到我们的修补程序地址137h)
      -D 110 L C<按回车> (确认数据区已经有了我们想要的数据)
      -U 137<按回车> (确认我们的新程序已经输入了)

      现在我们可以把这个小程序存入硬盘了:
      (注意:在现在整个程序的最后一条命令"JMP 0125" 的后面一条的地址是0140h)
      -H 0140h 100<按回车> (计算140h-100h=40h; 答案是我们现在有一个长度为64字节的小程序)
      -RBX<按回车> (检查BX寄存器的值是否为"0")
      :<按回车> (如果BX是0000h那么就不需要改动啦)
      -RCX<按回车> (要把CX改为40h。这是我们的程序的长度)
      :40<按回车> (现在你可以把这0000:0040h个字节的小程序放入硬盘啦)
      -W<按回车> (覆盖我们的原程序)
      -G<按回车> (尝试运行我们的新程序)
      -Q<按回车> (退出DEBUG回到DOS)

      PROMPT> DIR printhw5.com<按回车>
      现在你再看就发现文章大小不再是54字节, 变成了64字节.
      PROMPT> printhw5.com<按回车>
      现在是首先在屏幕上打印 "Hello,World"一次,然后再打印"Hello,World" 5 次(译者注:这里其实可以在编程的时候换一换内容试一试.

      返回目录

      13) 让我们逐步运行这个刚刚修补的程序:

      PROMPT> DEBUG printhw5.com<按回车>
      -R<按回车> (第1步:地址0100h内容是 EB35 "JMP 0137")
      -T<按回车> (第2步:地址0137h内容是B409 "MOV AH,09")
      -T<按回车> (第3步:地址0139h内容是BA1001 "MOV DX,0110")
      -T<按回车> (第4步:地址0139h内容是CD21 "INT 21")
      -P<按回车> (运行第5:"Hello,World"地址013Eh内容是EBE5 "JMP 0125")
      -T<按回车> (到这里控制权已经回到了原程序)
      如果你想的话,你可以一步一步的执行完全部程序;方法就是一直按"T",直至到达下一个功能调用运行完成后。到那时按一个"P"就可以继续按"T".

      返回目录

      14)如果一开始的命令不是跳转命令,那么可能就要用这种方法了:

      例如:如果我们想叫程序printhw 先打印"ABC",就要获取控制权了。然后打印"ABC"的程序把控制权给回原来的printhw.

      在这个事例里 ,printhw在100h的地址有两字节的程序;
      不能象上面那样简单的替代(一个JMP代替另一个JMP)就完事。
      解决办法就是使用NOP命令。


      PROMPT> DIR printhw.com<按回车>
      将汇报程序的长度为267字节(10Bh 字节).

      PROMPT> DEBUG printhw.com<按回车>
      -R<按回车> (IP=100h 并且printhw's 的文件大小=BX:CX=0000:010Bh)
      -U 100<按回车> (第一条指令B4 09 (MOV AH,09)是两个字节的)
      (第二条命令是三个字节的 BA 00 02 (MOV DX,0200))
      -H 100 10B<按回车> (最后一条printhw的指令是在100h+10Bh=20Bh)
      (DOS的INT 21功能调用是在105h开始的)
      现在你有足够的资料输入你的程序了!
      -A 100<按回车> (要在printhw 的IP开始位置就夺取程序的控制权)
      JMP 20B<按回车> (跳到20Bh增加一个程序)
      NOP<按回车> (用空指令填充直至你去到下一条完整的指令)
      NOP<按回车> (你可以用它来覆盖你不想只执行的原程序命令 ,而不改变原来的地址。但是在这里我们只需要两个NOP)
      译者注:为了使大家更加明白所以我将各条命令对应的机械命令的长度写在下面
      B409 MOV AH,09
      BA0002 MOV DX,0200
      E90301 JMP 020B
      90 NOP
      这样我们就很清楚的看到JMP 020B的长度比MOV AH,09多了1个字节,但是MOV DX,0200有是3个字节,而NOP是空指令,是不执行任何操作的,它只是占1个字节。所以我们现在把前两条指令用一个JMP 020B和两个NOP代替。后面再加上去。
      <按回车> (结束汇编命令回到DEBUG命令输入)
      -U 100<按回车> (看一看前面我们做了些什么)
      (注意DOS INT 21中断任然是在 IP=105h的地方开始)
      -A 20B<按回车> (现在把我们的原程序写在后面)
      MOV AH,02<按回车> (选择DOS 的 2号功能调用, 字符显示输出)
      MOV DL,41<按回车> (在DL寄存器存入"A"的ASCII码41h)
      INT 21<按回车> (执行DOS 的功能调用,显示字符"A")
      MOV DL,42<按回车> (在DL寄存器存入"B"的ASCII码42h)
      INT 21<按回车> (执行DOS 的功能调用,显示字符"B")
      MOV DL,43<按回车> (在DL寄存器存入"C"的ASCII码43h)
      INT 21<按回车> (执行DOS 的功能调用,显示字符"C")
      MOV AH,09<按回车> (现在重新输入原来在100h的程序指令)
      MOV DX,0200<按回车> (现在要打扫寄存器了,还原原来的200h的值)
      JMP 105<按回车> (跳到INT 21指令的位置105h)
      <按回车> (请注意一下你这里最后的地址是0221h)
      -H 221 100<按回车> (计算221h-100h=121h 就是289字节的程序)
      -R CX<按回车> (把CX的值设为121h, 这就设定了程序的新长度)
      :0121<按回车> (现在用121h (也就是289字节)覆盖原值)
      -W<按回车> (把这289个字节写回原程序)
      -Q<按回车> (退出DEBUG)

      PROMPT> DIR printhw.com<按回车>
      现在在看就会是新程序的长度289字节而不是,267字节)
      现在在屏幕上先出现"ABC"再出现"Hello,World"
鱼溺水而亡,是为了让大海能够记住他~
64楼
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删帖    删帖    |   
82622206

田鼠

中级会员

将军

贴子 1814

精华 3

积分 1061

信用 0

竞猜 0

魅力 188

威望 0

现金 70 CZB

银行 0 CZB

黄金 0

比特币 0

注册时间 2005-06-01

发表于:2005-12-06 08:12:42   |  显示全部帖子   |  转账至  82622206
§2.2  DOS初步

重点及难点分析:掌握DOS的常用命令的灵活使用。

2.  DOS是单用户、单任务的磁盘操作系统,WINDOWS是多任务、用于管理微机的各种软、硬件资源。

§2.2.1 DOS磁盘文件、目录与路径

重点及难点分析:掌握文件、目录与路径的概念。

1.文件:掌握文件的概念,详见P22。

2.文件名的组成:掌握文件名的组成,详见P22。

3.目录:掌握文件的概念,详见P22。

4.路径:掌握绝对路径与相对的区别,详见P22。

练 习 题:

⒈文件名由主文件名和两部分组成,两者之间需用圆点“.”隔开。

⒉在DOS中,文件是以      结构存储在磁盘上。

⒊从根目录起寻找文件,这种路径叫     ,否则是从当前目录开始寻找文件,这种路径称为      。

§2.2.2 DOS命令

1.DOS命令分两种:内部命令和外部命令,掌握两种命令的区别。

2.DOS命令的使用:

  ⑴盘符及转换磁盘操作:(内部命令)

     ①A:\>D:

     ②C:\>A:

     ③C:\>D:

     ④C:\>F:

       按回车键后,屏幕显示:

       Invalid drive specification  表示指定了无效的驱动器标识符。

  ⑵建立子目录命令MKDIR(MD)

    ①命令格式:MKDIR [D:] [PATH]〈子目录名〉或 MD [D:] [PATH]〈子目录名〉

②C:\>MD STUDENT

③C:\>MD STUDENT\STUDENT

④C:\STUDENT>MD  TEACHER

    ⑤A:\>MD  BOY

    ⑥A:\>MD BOY\888

   ①②③④⑤⑥⑦⑧

   ①②③④⑤⑥⑦⑧

  ⑶显示文件目录命令DIR

①C:\>DIR

②A:\>DIR

③C:\>DIR/S/W

④D:\>DIR  C:\/S/W/P

⑤C:\WINDOWS>DIR D:\/S

⑥C:\WINDOWS>DIR D:\/W

⑦ D:\>DIR C:\WINDOWS/S/P

  ⑷改变当前目录命令CHDIR(CD)

   ①命令格式: CHDIR  [D:] [PATH]或CD [D:] [PATH]

   ②C:\>CD WINDOWS

   ③C:\>CD WINDOWS\SYSTEM

   ④C:\WINDOWS\SYSTEM>CD..

     C:\WINDOWS>

   ⑤C:\WINDOWS\SYSTEM\COMMAND>CD\

     C:\>

   ⑥C:\WINDOWS\SYSTEM>CD

     C:\WINDOWS\SYSTEM>

  ⑸删除子目录命令RMDIR(RD)

   ①RMDIR [D:][PATH] 〈子目录名〉或RD [D:][PATH] 〈子目录名〉

   ②注意:一.根目录不能删除.

           二.必须保证该目录为空,即该目录下没有任何文件和子目录.

           三.当前目录下不能删除当前目录.

   ③C:\>RD C:\ (错误)

   ④A:\>RD A:\ (错误)

   ⑤C\:STUDENT>DEL *.*

     C:\>RD STUDENT

   ⑥C:\WINDOWS>RD WINDOWS (错误)

   ⑦D:\>RD C:\STUDENT

   ⑧A:\>RD C:\STUDENT

   ①②③④⑤⑥⑦⑧⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆

   ①②③④⑤⑥⑦⑧

   ①②③④⑤⑥⑦⑧

  ⑹删除子目录及其文件命令DELTREE

2                       命令格式: DELTREE  [D:] [PATH] <子目录名>

3                       C:\WINDOWS\COMMAND>DELTREE  AB

③C:\DOS>DELTREE   A:\888\999

  ⑺文件拷贝命令COPY

    ①命令格式: COPY  [D:] [PATH]     [D:] [PATH]

②注意: I .filename.ext1:待拷贝的源文件名,它前面是该文件的盘符和路径.

       II . filename.ext2:复制的目标文件名字,它是可选项.

       COPY命令可以写成以下3种常用格式:

A:命令格式: COPY   [PATH1]     D: [PATH2]

     I .C:\DOS>COPY  COMMAND.COM     A:\

     II .A:\>COPY   *.*  C:\

     III .C:\>COPY   *.COM   D:\

B. 命令格式: COPY   [PATH1]     D: [PATH2]

filename.ext2:复制的目标文件名字,它是可选项.

   ①C:\DOS>COPY  *.COM   D:\*.EXE

   ②A:|>COPY 568.*   C:\888.*

   C:文件合并命令:

     A:命令格式: COPY  D: [PATH1] <文件名>+ D: [PATH2] <文件名>    D:[PATH3]<文件名>

        注意: D: [PATH3]  <文件名 >是可选项

        ①C:\>COPY  A:\1.TXT+C:\2.TXT+D:\3.TXT      D:\4.TXT

        ②C:\>COPY  A:\1.TXT+C:\2.TXT+D:\3.TXT      

  ⑻文件易名命令RENAME(REN)

       命令格式: RENAME  [d:][PATH]      

       注意:目标文件名前不允许带盘符和路径.

     ①C:\>REN  A:\KEYCAI\*.DAT      A:\KEYCAI\*.TXT(错误)

     ②C:\>REN  A:\KEYCAI\*.DAT      c:\CAI\*.TXT(错误)

     ③C:\>REN  A:\KEYCAI\*.DAT      *.TXT

     ④A:\>REN  A:\KEYCAI\*.DAT      *.TXT

  ⑼删除文件ERASE(DEL)

      命令格式: DEL   [d:][PATH]

     ①C:\>DEL *.COM

     ②C:\>DEL C:\TY\TT\*.COM

     ③C:\>DEL A:\KV300\KV300.COM

     ④C:\>DEL D:\WINDWOWS\ *.EXE

     ⑤C:\>DEL *.*

  ⑽显示文本文件内容命令TYPE

      命令格式: TYPE   [d:][PATH]

    注意:每次只能显示一个文本文件.

    ①C:\>TYPE     C:\TT\A.BAT

②C:\>TYPE    C:\TY\TT\568.TXT

③C:\>TYPE  C:\TY\TT\*.COM(错误)

④D: \>TYPE   C:\WINDWOS\*.*(错误)

⑤C:\>TYPE    A:\YES.EXE(错误)

  ⑾清屏命令CLS

     ①C:\>CLS

②A:\TT>CLS

     ③D:\>CLS

  ⑿显示DOS版本号命令VER

      ①C:\>VER

  ②A:\8898>VER

练 习 题:

⒈删除文件的命令是     ,显示当前目录的命令是    。

⒉将文件1.TXT、2.TXT、3.TXT、4.TXT合并成5.TXT命令是          .

⒊磁盘上的文件以     型结构存在于磁盘上。

⒋有如下目录树:

                C:\    TA

                        TB  TC   2.TXT

                            1.TXT

写出如何清除目录TB的命令.

⒌     路径是从当前目录开始但不包括当前目录.
鱼溺水而亡,是为了让大海能够记住他~
65楼
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删帖    删帖    |   
82622206

田鼠

中级会员

将军

贴子 1814

精华 3

积分 1061

信用 0

竞猜 0

魅力 188

威望 0

现金 70 CZB

银行 0 CZB

黄金 0

比特币 0

注册时间 2005-06-01

发表于:2005-12-06 08:12:12   |  显示全部帖子   |  转账至  82622206
dos系统中有许多未公开的命令与参数。我经过收集整理,发现了很多。由于dos的有好几种,所以下面仅以ms-dos为例,介绍一下常用命令中的未公开的命令与参数。经过比较,我发现在ms-dos的各版本中,7.x版中的未公开命令与参数是最多的,这些7.x版本中的未公开命令与参数在其它dos版本中通常是没有的,但却是非常实用的,例如command /z命令,这是用dos自带的命令显示errorlevel(错误返回代码)值的唯一方法(当然,用其它的附加工具,如err2env等也可以做到)。

dos未公开命令:

truename:用于显示实际的路径,对subst等命令很有用。
installhigh:用在config.sys中,将文件调入umb。
logo和comment:仅用在dos7中的config.sys中,用法未知。

dos未公开参数:

command /f 使fail作为abort,retry,fail中的默认选项。
command /d 在dos5中是禁止autoexec.bat自动执行;在6.0+版本中是禁止/f参数。
command /z 显示errorlevel(错误返回代码)信息。
command /t 在dos7.x中强制将command.com永久性调入常规内存。

format /autotest 自动完成格式化过程。
format /backup 自动完成格式化过程,并提示输入卷标。
format /select 只在磁盘上备份系统区数据,相当于mirror程序。
format /select /u 将引导区和文件分配表用f6h填之。
format /z:n 设置fat32分区上的簇大小。

fdisk /mbr 重写硬盘主引导记录。
fdisk /cmbr drive 重写指定驱动器上的主引导记录。
fdisk /pri:size 创建主分区。
fdisk /ext:size 创建扩展分区。
fdisk /log:size 在扩展分区上创建逻辑驱动器。
fdisk /prmt|/q 提示行动/安静模式。
fdisk /partn 将分区表信息保存到partsav.fil中。
fdisk /actok 用于dos7中,跳过完整性测试。
fdisk /fprmt 用于dos7中,自动采用fat32,并跳过提示信息。

doskey /appedit 使doskey也应用于其它程序(如debug等)中。
doskey /command和/permanent和/scrsize和/xhistory 用法未知。

scandisk /clip 用于dos7中,将长文件名剪为短文件名。
scandisk /nolost 用于dos7中,不提示表面测试或丢失簇。
scandisk /noui和/text 用于dos7中,使用标准的dos界面。
scandisk /mount 相当于scandisk.ini中的mount=always。
scandisk /time 相当于scandisk.ini中的scantimeout=on。

qbasic /qhelp 进入dos6的全屏幕帮助系统,相当于执行help命令。
qbasic /edcom 进入dos6的文件编辑器,相当于执行edit命令。

mem /a或mem /all 显示hma信息。

ver /r 显示扩展的版本信息。

dir /z 用于dos7中,表示不显示长文件名。

dos=single 用在dos7中的config.sys中,启动单一模式的dos。

device=himem.sys /q 当himem.sys加载时使用安静模式。

device=emm386.exe notr 不要检测token ring网络适配器。

dos未公开用法:

if exist xmmxxxx0 ... 此命令可以判断当前是否安装了himem.sys驱动程序。
if exist emmxxxx0 ... 此命令则用来判断当前是否安装了emm386驱动程序。

dir , 用在dos7以前的版中中,显示所有文件,相当于dir /a。

:: 此符号可在批处理文件中代替rem注解命令,可以加快运行速度。

以上是ms-dos中的未公开命令与参数,其中有些是非常实用的,大家不妨一试。


虽说不是我写的,但是为了猫猫事业我就转载一下,给有需要的朋友用一下吧
鱼溺水而亡,是为了让大海能够记住他~
66楼
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删帖    删帖    |   
82622206

田鼠

中级会员

将军

贴子 1814

精华 3

积分 1061

信用 0

竞猜 0

魅力 188

威望 0

现金 70 CZB

银行 0 CZB

黄金 0

比特币 0

注册时间 2005-06-01

发表于:2005-12-06 08:12:05   |  显示全部帖子   |  转账至  82622206
ping的命令参数!

    这个是本次问题集的重点部分!无论是小鸟还是老鸟,你们能保证你真的对这些参数了如指掌么?恐怕都未必!还是好好看看吧!

    这是TCP/IP协议中最有用的命令之一

    它给另一个系统发送一系列的数据包,该系统本身又发回一个响应,这条实用程序对查找远程主机很有用,它返回的结果表示是否能到达主机,宿主机发送一个返回数据包需要多长时间。

    Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
                        [-r count] [-s count] [[-j host-list] [-k host-list]]
                        [-w timeout] destination-list

    Options:

    -t Ping the specifed host until interrupted.(除非人为中止,否则一直ping下去)

    -a Resolve addresses to hostnames.(把IP转为主机名)

    -n count Number of echo requests to send.(响应请求的数量)

    -l size Send buffer size.(封包的大小)

    -f Set Don't Fragment flag in packet.(信息包中无碎片)

    -i TTL Time To Live.(时间)

    -v TOS Type Of Service.(服务类型)

    -r count Record route for count hops.

    -s count Timestamp for count hops.

    -j host-list Loose source route along host-list.

    -k host-list Strict source route along host-list.(较严格的……唉,怎么译好……算了,放着吧)

    -w timeout Timeout in milliseconds to wait for each reply.(timeout的时间)

    比如大家可能都知道的一个命令 # ping -f -s 65000 ***.***.***.***或者前阶段大家所谓ping死霉国佬时所用的命令(当然这样只会造成我方自己的网络阻塞)。

    其实这个命令主要是用来看对方应答的速度,如果怎么ping 得到的结果都是request time out。那恐怕你根本就不用你去找这台主机了,它不在你的射程之内。
鱼溺水而亡,是为了让大海能够记住他~
67楼
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删帖    删帖    |   
82622206

田鼠

中级会员

将军

贴子 1814

精华 3

积分 1061

信用 0

竞猜 0

魅力 188

威望 0

现金 70 CZB

银行 0 CZB

黄金 0

比特币 0

注册时间 2005-06-01

发表于:2005-12-06 08:12:46   |  显示全部帖子   |  转账至  82622206
一般说来,大家电脑上的硬盘跟我一样已经全部用于MS-DOS/WIN操作系统的分区。为了能够安装LINUX,只好为LINUX重新分配硬盘空间。我立马把朋友的硬盘借来,数据统统备份下来,再重装系统。不过有三种可供选择的方法:

  1) 将MSDOS下的最后一个逻辑盘上的数据全部移到其它分区中,将该逻辑盘用分区工具删除,将这部分空间给LINUX使用。

  2) 重新将硬盘分区,这是最直接和最麻烦的一种方法。具体操作如下:

备份用户的文件  
用MS-DOS系统盘启动系统  
用FDISK删除原有分区,重建新的分区,将分配给LINUX的空间留下来不分配给任何一个分区  
重新安装原来的用户系统  
  3) 利用一些分区工具在不删除硬盘原有数据的情况下重新分区。如分区魔术师等。

2.2 从CDROM安装Red Hat Linux 7.1

  我们可以通过光盘、硬盘、网络安装Red Hat Linux 7.1系统,最常见的方法就是使用光盘安装。使用光盘安装无外乎就是三个要求:

  1) 你的主板支持光盘启动

  2) 你有光驱

  3) 你有Red Hat Linux 7.1安装光盘

  通常情况下,这是没问题的。笔者也建议您使用光盘安装,这样是这简单的。随着Linux系统下的应用软件逐渐增多,一张光盘已无法容纳,Red Hat Linux 7.1安装光盘有两张,第一张可以直接从光盘启动,包含了大部分的软件包和一些安装工具。第二张光盘则是许多附加的软件包。不过这次与以往不同的是,Red Hat公司专门进行了改进,安装程序可以从多个光盘读取资料。安装的时候,你就会发现中途提示你更换第二张光盘。现在我们就一起开始Red Hat Linux 7.1安装之旅。

第一步:选择安装模式

  塞入第一张光盘,让计算机从CDROM启动,将会出现了简洁的欢迎信息。这时可以选择不同的安装模式:

  1) 图形模式:直接按回车即可,整个安装过程就象Windows一样,而且可以使用鼠标操作。不过此时的Red Hat好象对显卡很挑剔,有的出现屏幕太大,找不到按钮,有的则根据无法显示图形界面。如果是这样,你可以按下热启动键重选文本模式进行安装。

  2) 文本模式:输入text,再按回车。就会进入文本模式的安装界面,有一定经验的人还是使用这种方式比较好。

  3) 专家模式:输入expert,再按回车。在这种情况下,安装程序就好象没有脑子一样,所有的东西都要您来决策。除非你十分熟悉Linux,并且有一些特殊的硬件安装程序无法正确配置,否则不要使用这种方式。

  4) 救援模式:这不是在首次安装时使用的,它仅是用于原有的Linux系统无法正常启动的情况下使用。这种方式下,你将进入一个微型的Linux系统,并且提供了许多恢复Linux的工具供你使用。

  5) 驱动盘模式:如果你有特殊的硬件驱动盘,需要在安装时提供给Linux系统使用,则你就输入“linux dd”,再按回车,安装程序会提供机会让你插入驱动软盘。

  建议使用文本模式进行安装。

第二步:选择语言

  Red Hat Linux 7.1提供了18种不同的语言,可惜还是没有中文,只能选择“english”。然后继续。

  注:Red Hat公司已在近期推出了中文版,大家可以找来试一试。

第三步:选择键盘

  在此选择us,继续。

  注:笔者试过在Red Hat Linux 7.1下使用罗技公司的Logitech iTouch无线键盘,那么普通的104键盘更不会有问题了。

第四步:选择安装方式

  Red Hat Linux 7.1提供了Workstation,Server,Laptop,Custom,Upgrade Existing(分别是工作站,服务器,笔记本电脑,用户自定义,升级老版本)这五种安装方式。我们可以根据自己的实际需要来选择安装方式。

  1) Workstation:工作站方式。对于一般用户建议使用此方式。工作站类型安装将会清除掉所有硬盘上原有的所有Linux分区,对于非Linux分区(如Windows 98)会置之不理。这种方式安装十分简单,而且如果你的机器上如果原来有Windows 98的话,安装完后,会自动完成LILO双启动的配置。但是,如果你的机器上原来是NT的话,那就千万不要使用这种方式,否则你的NT可能再也无法启动。

  2) Server System:服务器系统方式。警告:采用这种方式安装,将会干掉所有硬盘上所有分区的一切信息。这绝对不是开玩笑!许多初学者已经付出了血与泪的代价。通常在你需要在一台空PC上构建一台网络服务器,才选择它。

  3) Laptop:便携机、笔记本方式。笔顾名思义,当你在笔记本电脑上安装时,建议采用该方式。

  4) Custom System:定制安装。对于Linux有一定了解的朋友,建议使用该方式,自由地构建Linux。在下第一次安装Linux的时候就勇敢地采用了这种方式。

  5) Upgrade Existing System:升级现有系统。假设你的硬上有老版本的Red Hat Linux的话,这是你最佳的选择。

  建议使用“定制安装”。

第五步:进行硬盘分区

  首先,会让你选择不同的分区工具:Disk Druid和fdisk,建议使用Disk Druid。

  在Disk Druid的主界面的最上面是'Current Disk Partitions'区,列出各个硬盘分区的信息。每行由五个项目组成:Mount Point -- 指定该分区对应的Linux系统目录;Device -- 硬盘分区的设备名;Requested -- 分区定义时申请的最小空间;Actual -- 当前分配给这个分区的空间;Type --分区类型。

  而中间的是'Drive Summaries'区,一行对应一个物理硬盘,每行由六个项目组成:Drive -- 硬盘的设备名;Geom [C/H/S] -- 硬盘的物理信息,包括柱面、 磁头和扇区的数量;Total -- 硬盘所有可用空间;Used -- 硬盘已分配空间;Free -- 硬盘未分配空间;Bar Graph -- 硬盘已用空间表示图。  

  最下面的是Disk Druid的按钮区,由五个按钮组成:Add -- 申请一个新的分区; Edit -- 修改在'Current Disk Partitions'区中选中的分区的属性;Delete -- 删除'Current Disk Partitions'区中选中的分区;Ok -- 确认分区操作,重写硬盘分区表;Back -- 不保存修改而退出,回到前一个屏幕,重新开始。

  我建议为Linux分一个根分区,一个交换分区(建议64M、128M或256M),即:

  用Tab选择Add钮,按回车,这时屏幕上将会出现一个题为'Edit New Partition'的对话框。首先我们在Mount Point项中,输入这个分区所对应的系统目录:“/”(根目录);接着在Size(Megs)项中,输入分区的大小;在Type这一项中用光标上、下键键选择适当的分区类型,我们选中Linux的文件分区Linux native;最后按OK确认。这样我们就成功地建立起一个为Linux所用的分区了。当然如果你的硬盘空间允许,你完全可以再建立一个或几个分区给Linux使用。接着用同样的方法给Linux增加一个交换分区,不同的仅在于Mount Point项让它空着,在Type项目中选择Linux Swap。

  注:如果你在前面选择的是图形界面安装的话,将会提供一个图形化的分区界面,使用起来也是很方便的,而且还可以使用自动分区的办法。让安装程序自已创建分区。

  在做这一步时需要谨慎,不要不小心删掉原来的分区,那就惨了。确认没有错后,按OK按钮继续。然后根据提示将新的Linux分区格式化,以便使用。

第六步:LILO配置

  LILO,就是Linux Loader,即Linux引导器,它负责启动Linux操作系统。我们可以通过配置它实现双启动。首先,安装程序会让你填写有什么内核参数需要传给LILO,通常是不需要的。接着,会询问你要将LILO安装在什么位置,通常有两种选择:1)第一硬盘的主引区(MBR);2)Linux分区的引导扇。

  如果你想使用LILO来做双启动的话,你需要选择第一种,如果是想用Linux启动软盘或其它系统引导器引导Linux的话,那就选择第二种。

第七步:设置主机名

  随便为你的机器取一个名字。

第八步:选择系统安全等级

  这也是Red Hat Linux 7. 1提供的新选项,它提供了三种选择:

  1) High:如果你选择High级,那么所有来自外界的网络访系问都将被禁止;

  2) Medium:默认的级别,选择该级别,则对于外界的网络访问仅限于该系统提供的网络服务;

  3) No firewall:最低的安全保障,任何外界的网络访问都将被允许。

第九步:常用选项设置

  接着,设置鼠标、选择你需要支持的语言种类(注意,这里是提供了中文支持的哟),以及时区(图形界面下应点China,而在文本模式下则应选择PRC)。

第十步:用户设置

  1) 首先设置系统管理员(就是root用户)密码,系统管理员是系统的最高权限者,拥有该系统,所以这个密码是十分重要的;

  2) 接着安装程序提供了一个增加用户的工具,你可以通过这个工具很轻松地添加系统用户。

  3) 最后是关于用户认证的配置:

  a. Shadow Passwords:默认是选中的,请不要修改。该功能是用来保护密码安全的;

  b.使用MD5密码加密:默认也是选中的,请不要修改,它也是保护密码安全的;

  c.使用NIS:当你要通过网络上的NIS服务器进行用户验证时,请填写相关信息;

  d.使用LDAP:当你要通过网络上的LDAP服务器进行用户验证时,填写相关信息;

  e.使用Kerberos:当你要使用Kerberos系统进行用户验证时,填写相关信息;

第十一步:选择软件包

  这一步是安装过程中最重要的一步,你可以根据提示选择你需要的软件。安装程序将所有的软件分成了许多类:

  Printer Support:打印机支持

  X Window System:X Window系统

  GNOME:桌面管理器GNOME

  KDE:桌面管理器KDE

  Mail/WWW/News Tools:一些收发Mail、WEB浏览、新闻阅读的常用工具

  DOS/Windows Connectivity:提供DOS和Windows的兼容工具

  Graphics Manipulation:图形操作软件

  Games:游戏软件

  Multimedia Support:多媒体支持软件

  Laptop Support:笔记本电脑专用的支持软件

  Networked Workstation:网络工作站工具,如Telnet、FTP等客户端

  Dialup Workstation:拔号上网工具

  News Server:新闻服务器

  NFS Server:网络文件系统服务器

  SMB(Samba)Server:Samba(就是NetBIOS协议)服务器系统

  IPX/Netware? Connectivity:IPX协议支持软件

  Anonymous FTP Server:匿名FTP服务器

  SQL Server:postgresql 与MySQL数据库服务器

  Web Server:WEB服务器(Apache)

  DNS Name Server:域名服务器

  Network Management Workstation:网管工作站,提供一些SNMP支持

  Authoring/Publishing:出版方面的软件

  Emacs:著名的集成编辑软件

  Development:开发工具包

  Kernel Development:内核开发包,包括内核源程序

  Utilities:一些常见工具,如Linuxconf

  Everything:所有软件包,如果你的Linux分区足够大(2400M以上),那么你可以选中它,将所有的软件都装上。

  注:在选择界面之下,有一个选项,选中时它会列出详细的软件安装列表,你还可以进行一些选择。

  选择完要安装的软件包后,系统会自己进行软件包依赖检查,接着就开始了文件的拷贝。这时你可以休息一下了。不过与以前不一样,拷贝到一半时,需要你更换光盘!

第十二步:制作启动盘

  安装完成之后,会提示你制作一张Linux启动软盘。虽然不是很有用,但是对于初学者而言还是做一张备用为好。因此在以下情况时,能够用得上:

  1) 准备将LILO放在Linux分区中,可以通过软盘引导Linux;

  2) 装在MBR上的LILO程序在安装Windows时被覆盖,则可以使用这张软盘引导,再运行“/sbin/lilo”,重新往MBR上写LILO程序;

  3) 当系统崩溃时,可以使用Linux启动软盘启动,做一些恢复。

第十三步:拷贝文件

  接下来就是历时最长,也是最核心的过程:拷贝文件。Linux安装程序将你所选择的软件包通通拷贝到硬盘分区中。要注意的是,在安装过程中是需要你换第二张光盘的。

第十四步:配置显卡/X Window

  接下来,安装程序将自动检测你的显卡、显示器,由于Red Hat Linux 7.1采用了最新的XFree86 4.0,所以对显示卡的支持更好了,大部分显卡都可以被识别,由于无法识别的话,那就只好等安装完以后再配置了。

  如果你的显卡、显示器都幸运地被识别,那么安装程序将要求你选择图形界面的分辨率,如果你的显卡很好,那就选择800*600*24位色或1024*768*24位色,象我使用的显卡太老,就只好选择800*600*16位色。你也可以选择多种(启动后,可以使用Ctrl+Alt +和-来切换)。

  设置完分辨率后,安装程序将测试X Window,如果你的选择正常的话,那么你可以看到漂亮的X Window,那你也就可以轻松地按OK,表示确定。

  按下OK按钮后,安装程序会询问你的Linux系统是否一启动就进入X Window,默认为“是”。不过我是不喜欢,在此选择了“NO”,这样启动Linux后将进入字符状态,需要X Window时再执行startx命令手动启动。

  好,到此大功告成,Red Hat Linux 7.1将提示你取出光盘,重新启动电脑,带着小红帽子的企鹅落户你家了。

  注:Red Hat Linux 7.1在第一次启动时将会自己运行一个叫Kudzu的程序,用来完成一些硬件添加操作,通常是网卡和声卡。操作十分简单,你只需选择Configure按钮,系统会帮助你完成这些硬件的配置工作。

2.3 其它安装方式简介

  如果你没有光驱的话,那么你还可以通过以下几种方式来完成安装:

  1) 从FTP站点安装

  2) 从NFS服务器安装

  3) 从SMB共享卷安装

  4) 从硬盘安装

  1.制作Linux启动盘

  如果采用这些安装方式,那你首先得制作两张Linux启动盘。

  1) 在安装光盘上找到LINUX启动盘的映象文件,/images目录下的boot.img(启动盘)和supp.img(扩展盘)这两个文件。

  2)从/images、/install或/dosutils目录中找到制作映象盘的工具RAWRITE.EXE。

  3)将映象文件和RAWRITE.EXE拷入同一目录,然后在DOS命令行下执行RAWRITE:


       C:linst>RAWRITE
       Enter disk image source file name:在这里输入映象文件名
       Enter target diskette drive:在这里输入目标盘符如A:

  

  2.从FTP站点安装

  要使用这种方式安装必须满足以下条件之一:

  1) 你的机器与存放着安装盘的FTP服务器以局域网形式相连;

  2) 在你的局域网的FTP服务器上有安装盘。

  要注意,你的FTP服务器必须支持长文件名,才可能成功安装。你需要使用Linux的启动盘和扩展盘启动,并配置有效的域名服务器或指定FTP服务器的IP地址,进行安装。

  3.从NFS服务器安装

  如果在你的局域网中有一台NFS服务器的话,你可以将安装盘复制到NFS服务器上,然后用Linux的启动盘启动,访问NFS服务器进行安装。同样的,这也需要NFS服务器能够支持长文件名。

  4.从SMB共享卷安装

  将安装盘放到一个支持共享卷的Windows 9x/NT/2000服务器上,然后使用Linux启动盘与扩展盘启动,通过访问共享卷中的安装盘实现安装。

  5.从硬盘安装

  这种方式适合于从网上下载了安装盘的用户,首先,你可以将Red Hat Linux包文件拷贝到您的硬盘:

  1) 所有的文件都要放在一个硬盘分区上;

  2) 将所有的内容放在RedHat目录下;

  3) 然后将要安装的包拷贝到另一个子目录RPMS

  接着就可以使用Linux的启动盘与扩展盘启动进行系统安装
鱼溺水而亡,是为了让大海能够记住他~
68楼
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删帖    删帖    |   
82622206

田鼠

中级会员

将军

贴子 1814

精华 3

积分 1061

信用 0

竞猜 0

魅力 188

威望 0

现金 70 CZB

银行 0 CZB

黄金 0

比特币 0

注册时间 2005-06-01

发表于:2005-12-06 08:12:38   |  显示全部帖子   |  转账至  82622206
人们现在已习惯在Internet上花费大量时间。随着ADSL和宽带网络的普及,人们在Internet上的时间越来越长,个人电脑的安全问题将会变得越来越突出。有统计表明黑客们在每天24小时扫描拨号连接的用户,当然他们的目标并不是我们这些普通上网用户,而是那些使用VPN在家办公的用户。突破这些用户的个人电脑总比突破层层设防的公司网络要容易得多。如果你是使用DSL或其他宽带网络的用户,那么你的危险将更大了,因为在使用DSL后,你的IP地址将很长时间不变,这无疑给那些黑客带来了很大的便利。我们当然可以选用一些现有的个人防火墙产品,比如说Norton的个人防火墙产品,Zone Labs的ZoneAlarm,以及国内厂商开发的天网防火墙等等。这些个人防火墙产品依据的防黑客原理通常不一样,例如Norton的Personal Firewall(个人防火墙)是基于应用程序的(Application Level)。基于应用程序的防火墙在使用上相当麻烦,因为你必须要为每一个访问Internet的程序设置策略。而随着策略的增多,防火墙的效率也逐步下降,况且过多的策略也会相互矛盾、影响,给系统安全带来漏洞。更糟糕的是,这些个人防火墙产品都非常占用系统资源。

Windows XP号称是随着Windows发布以来最伟大的升级,Windows XP给我们带来了很多新的特性,互联网连接防火墙(Internet Connection Firewall,以下简称ICF)就是其中的一个新的特性。下面我们就来谈谈这个ICF,看看它到底能为我们做什么(注:我们在谈ICF的时候都是以Norton的Personal Firewall来做参考和对比的,原因有二:其一,Norton的产品无论在国外还是在国内都是第一流的产品;其二,Norton的这款产品也可以代表这一类产品的技术特点)。

ICF的工作原理
ICF就像一个在你的个人电脑和外部Internet世界建立的虚拟盾牌,它可以让你请求的数据通过、而阻碍你没有请求的数据包,是一个基于包的防火墙。黑客们的攻击基本上都是由Ping一个IP地址开始的。当Ping通之后通常都是使用一些软件来进行端口扫描。攻击一台个人电脑和攻击一台主机还是有一点不同的。攻击主机时目标通常是早已锁定的,即便Ping不通也不会认为目标主机已经关机了;但是攻击个人电脑就不同了,通常黑客们是通过扫描一段IP地址开始来锁定目标,或者是个人电脑的用户在使用ICQ之类的软件时暴露了自己的IP地址。对于第一种的情况,Ping不通的IP地址通常被认为没有使用而忽略过去。所以,ICF的第一个功能就是不响应Ping命令,而且,ICF还禁止外部程序对本机进行端口扫描,抛弃所有没有请求的IP包。个人电脑同服务器不一样,一般不会提供例如Ftp、Telnet等服务,这样可以被黑客们利用的系统漏洞就很少。所以,ICF可以在一定的程度上很好地保护我们的个人电脑。

ICF是通过保存一个表格,记录所有自本机发出的目的IP地址、端口、服务以及其他一些数据来达到保护本机的目的。 当一个IP数据包进入本机时,ICF会检查这个表格,看到达的这个IP数据包是不是本机所请求的,如果是就让它通过,如果在那个表格中没有找到相应的记录就抛弃这个IP数据包。下面的例子可以很好地说明这个原理。当用户使用Outlook Express来收发电子邮件的时侯,本地个人机发出一个IP请求到POP3邮件服务器。ICF会记录这个目的IP地址、端口。当一个IP数据包到达本机的时候,ICF首先会进行审核,通过查找事先记录的数据可以确定这个IP数据包是来自我们请求的目的地址和端口,于是这个数据包获得通过。当使用Outlook客户端邮件程序和Exchange邮件服务器时情况有所不同。一旦有新的邮件达到Exchange邮件服务器时,Exchange就会自动发一个IP数据包到Outlook客户机来通知有新的邮件到达。这种通知是通过RPC Call来实现的。当Exchange的IP数据包到达客户机时,客户机的ICF程序就会对这个IP包进行审核发现本机并没有对这个地址和端口发出IP请求,所以这个IP包就会被抛弃,客户机当然就不会收到发自Exchange邮件服务器的新邮件通知。手动让Outlook去接收Exchange邮件服务器上的新邮件当然是可以的。

ICF的局限性
那么,ICF不能做什么?ICF可不可以完全替代现有的个人防火墙产品?ICF是通过记录本机的IP请求来确定外来的IP数据包是不是“合法”,这当然不可以用在服务器上。为什么呢?服务器上的IP数据包基本上都不是由服务器先发出,所以ICF这种方法根本就不可以对服务器的安全提供保护。当然你也可以通过相应的设置让ICF忽略所有发向某一端口的数据包,例如80端口。那么发向80端口的所有数据包都不会被ICF抛弃。从这种意义上讲80端口就成为不设防的端口。这样的防火墙产品是不可能用在应用服务器上的,服务器上的防火墙产品都是基于建立各种策略来审核外来的IP数据包。ICF和基于应用程序的个人防火墙产品也是不一样的。基于应用程序的个人防火墙会记录每一个访问Internet的程序,例如,通过设置可以让IE有权来访问Internet而Netscape的Navigator没有权限来访问Internet,即便两个程序的目的IP地址和端口都是一样的。Norton的个人防火墙(Personal Firewall)就是这样一个典型的产品。简而言之,ICF没法提供基于应用程序的保护,也没法建立基于IP包的包审核策略。所以,ICF既不能完全替代现有的个人防火墙产品,也没有办法很好地工作在应用服务器上。

如何选择
那我们应该如何选择?笔者认为,Norton的Personal Firewall可以提供全方面的保护,即便这种保护是建立在繁琐的设定基础上的。在它能成功地为你提供一次有效的防护之前,会给你带来足够的烦恼。ICF并不能提供完全无懈可击的防护,但是ICF对个人电脑提供防护是足够的。在使用Shield Up对装有ICF的个人电脑进行端口扫描后,Shield Up 给出了“最安全模式”(Full Stealth Mode)的评价,这也是Shield Up对安全评价的最高等级。况且,ICF是Windows XP内建的功能,占用的资源相当少且不用花额外的钱去购买。其实从ICF受益最多的应该是那些仍然在使用Modem上网的朋友,实际上这部分用户占了50%以上,而在国内绝大部分的用户都是用Modem上网的。用Modem上网有其自身的特点,首先,你上网的时间不会太长,一般在几小时上下(包月的除外)。其次,每次建立连接后拨号服务器都会分配一个新的IP地址给你,长时间占用一个相同的IP的可能性应该很低。比起使用DSL和宽带的用户来讲,用Modem上网本身就安全了很多。所以,使用一个重量级的防火墙实在是没有太多的意义。而ICF则刚刚好,它既提供了一定的保护,而且又不太占用资源,真的是“刚刚好”!

怎样使用ICF
我们谈了这么多,那ICF到底该怎样使用?当你建立一个新的连接的时候,向导程序就会问你是否要激活ICF。在每一个连接的属性→高级选项中也可以让你选择激活或者取消ICF功能。在你激活ICF之后,在高级选项的下部就会出现“设置”按钮,单击设置就可以对ICF进行进一步的设置。ICF的设置主要有三部分:第一部分是服务项。通过设定这一部分可以让ICF对某些服务不进行审核。TCP/IP的服务都是由端口来区分的,你可以分别对TCP、UDP或者IP Protocol进行设置,在这一项中已经有了一些可选的缺省设置。当然你可以建立自己的设置。第二部分是关于日志的。ICF可以把它所抛弃的IP数据包以及获准通过的IP数据包都记录在案以便可以让你进行进一步的分析。第三部分就是关于ICMP的,ICMP通常用于Ping、Tracert程序以及路由的动态实现,我的建议是禁止所有的ICMP响应除非你有特别的需要。

定期分析日志可以发现潜在的安全问题,ICF的日志分为两部分:一部分是ICF审核通过的IP数据包,而另一部分就是ICF抛弃的IP数据包。日志一般存于Windows目录之下,文件名是pfirewall.log。其文件格式符合W3C扩展日志文件格式(W3C Extended Log File Format),分为两部分,分别是文件头(Head Information)和文件主体(Body Information)。文件头主要是关于pfirewall.log这个文件的说明,需要注意的主要是文件主体部分。文件主体部分记录有每一个成功通过ICF审核或者被ICF所抛弃的IP数据包的信息,包括源地址、目的地址、端口、时间、协议以及其他一些信息。理解这些信息需要较多的TCP/IP协议的知识。

在实际的使用中应尽量避免在局域网中使用ICF,它可能会给一些网络应用带来影响。在个人电脑中使用也可能会对一些程序的运行带来影响。例如,OICQ的“语音世界”功能就是建立在双方交互的基础上的,而ICF会影响这些交互过程从而使得连接无法建立。解决这样的问题也很简单,一种当然是取消ICF,但这不是推荐的方法。另一种方法就是找到到底OICQ使用哪个端口来实现语音功能,在前面介绍的属性→高级→设置→服务中来添加一项自定义设置从而使ICF忽略这个端口的检测。这样,OICQ的语音功能就可以正常使用了。

总之,ICF是Windows XP提供的一项新的功能,它并不是用来取代现有的个人防火墙产品,但是ICF能够为个人电脑提供相当的保护。我们为获得在网络上的安全所需要做的就是在建立连接的时候选择使用ICF,在需要的时候作出必要的设定,并且定期查看日志。当然,最先要做的就是购买Windows XP的家用或者专业版,并把它们安装起来。
鱼溺水而亡,是为了让大海能够记住他~
69楼
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删帖    删帖    |   
82622206

田鼠

中级会员

将军

贴子 1814

精华 3

积分 1061

信用 0

竞猜 0

魅力 188

威望 0

现金 70 CZB

银行 0 CZB

黄金 0

比特币 0

注册时间 2005-06-01

发表于:2005-12-10 09:12:20   |  显示全部帖子   |  转账至  82622206
相思来看看,这个是精华了吧?
鱼溺水而亡,是为了让大海能够记住他~
70楼
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删帖    删帖    |   
 71 12345678