|
|
用户名:freeopinion 笔名:freeopinion 地区: 安徽 行业:其他 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
查询工具
(作者置顶)
| 全国列车时刻表查询 | 全国身份证号码查询 | 全国天气预报查询 |
| 大学英语考试 | 免费在线多语言互译 | IE版图像处理工具 |
| IP地址和手机号查询 | 论文 | 图书 | 资料 | 健康男女疾病查询 |
| 金山词霸在线词典 | 世界地图免费查询 | 食物营养成分查询 |
| 速算恋爱成功率 | 电脑报价查询 | 标准体重计算 |
| 世界时间查询 | 全国高校名录 | 在线心理测试 |
- 作者: freeopinion 2006年03月20日, 星期一 19:47 回复(1) | 引用(0) 加入博采
入侵指定网站
首先,观察指定网站。
入侵指定网站是需要条件的:
要先观察这个网站是动态还是静态的。
首先介绍下什么样站点可以入侵:我认为必须是动态的网站 如ASP、PHP、 JSP等代码编写的站点
如果是静态的(.htm或html),一般是不会成功的。
如果要入侵的目标网站是动态的,就可以利用动态网站的漏洞进行入侵。
以下是入侵网站常用方法:
1.上传漏洞
如果看到:选择你要上传的文件 [重新上传]或者出现“请登陆后使用”,80%就有漏洞了!
有时上传不一定会成功,这是因为Cookies不一样.我们就要用WSockExpert取得Cookies.再用DOMAIN上传.
2.注入漏洞
字符过滤不严造成的
3.暴库:把二级目录中间的/换成%5c
4.’or’=’or’这是一个可以连接SQL的语名句.可以直接进入后台。我收集了一下。类似的还有:
’or’’=’ " or "a"="a ’) or (’a’=’a ") or ("a"="a or 1=1-- ’ or ’a’=’a
5.社会工程学。这个我们都知道吧。就是猜解。
6.写入ASP格式数据库。就是一句话木马〈%execute request("value")%〉 (数据库必需得是ASP或ASA的后缀)
7.源码利用:一些网站用的都是网上下载的源码.有的站长很懒.什么也不改.
比如:默认数据库,默认后台地址,默认管理员帐号密码等
8.默认数据库/webshell路径利用:这样的网站很多/利人别人的WEBSHELL.
/Databackup/dvbbs7.MDB
/bbs/Databackup/dvbbs7.MDB
/bbs/Data/dvbbs7.MDB
/data/dvbbs7.mdb
/bbs/diy.asp
/diy.asp
/bbs/cmd.asp
/bbs/cmd.exe
/bbs/s-u.exe
/bbs/servu.exe
工具:网站猎手 挖掘鸡 明小子
9.查看目录法:一些网站可以断开目录,可以访问目录。
210.37.95.65 images
10.工具溢出
11.搜索引擎利用:
(1).inurl:flasher_list.asp 默认数据库:database/flash.mdb 后台/manager/
(2).找网站的管理后台地址:
site:xxxx.comintext:管理
site:xxxx.comintitle:管理 〈关键字很多,自已找〉
site:xxxx.cominurl:login
(3).查找access的数据库,mssql、mysql的连接文件
allinurl:bbsdata
filetype:mdbinurl:database
filetype:incconn
inurl:datafiletype:mdb
12.COOKIE诈骗:把自己的ID修改成管理员的,MD5密码也修改成他的,用桂林老兵工具可以修改COOKIE。
13.利用常见的漏洞:如动网BBS
可以先用:dvbbs权限提升工具,使自已成为前台管理员。
THEN,运用:动网固顶贴工具,找个固顶贴,再取得COOKIES,这个要你自已做。我们可以用WSockExpert取得Cookies/NC包
这个我就不做了,网上教程多的是,自已下个看看。
工具:dvbbs权限提升工具 动网固顶贴工具
14.还有一些老漏洞。如IIS3,4的查看源码,5的DELETE
CGI,PHP的一些老洞,我就不说了啊。。太老了。没有什么大用途。
- 作者: freeopinion 2008年06月7日, 星期六 11:24 回复(0) | 引用(0) 加入博采
黑网
小川网页****生成器 - [小川] 链接地址: http://www.77169.org/Soft/HTML/20209.html
HTTPtunnel3.0 - [HTTPtunnel] 链接地址: http://www.77169.org/Soft/HTML/20208.html
情长在线ASP**** - [情人在线] 链接地址: http://www.77169.org/Soft/HTML/20207.html
突破华网解吧2.0限制 - [笑云CEO] 链接地址: http://www.77169.org/donghua/HTML/20205.html
解决S扫描不能在SP2下运行 - [紫色寒冰] 链接地址: http://www.77169.org/donghua/HTML/20204.html
对boboo一次安全检测 - [xfu-ajiao] 链接地址: http://www.77169.org/donghua/HTML/20203.html
小刺客TXT版 - [小刺客] 链接地址: http://www.77169.org/Soft/HTML/20202.html
啊D注入工具2.3黑客X破解专版 - [心灰意冷] 链接地址: http://www.77169.org/Soft/HTML/20201.html
魔兽世界****生成器 - [雨夜] 链接地址: http://www.77169.org/Soft/HTML/20200.html
内网互控全攻略 - [个人家园] 链接地址: http://www.77169.org/donghua/HTML/20199.html
最新冲斗地主分大法 - [****帝国] 链接地址: http://www.77169.org/donghua/HTML/20198.html
用鸽子在冲个VIP的鸽子以及点卡QB - [小马] 链接地址: http://www.77169.org/donghua/HTML/20197.html
校园网最终解决方案实例 - [佚名] 链接地址: http://www.77169.org/Soft/HTML/20196.html
IP电话网络组建案例 - [佚名] 链接地址: http://www.77169.org/Soft/HTML/20195.html
阿D-SQL注射2.3(火狐专用破解版) - [啊D] 链接地址: http://www.77169.org/Soft/HTML/20194.html
ASP****加密解密工具(火狐专版) - [wSiLm] 链接地址: http://www.77169.org/Soft/HTML/20192.html
Spook5.5 - [sforevernet] 链接地址: http://www.77169.org/Soft/HTML/20191.html
最新整套QQ超级大盗教程 - [狂人] 链接地址: http://www.77169.org/donghua/HTML/20190.html
阿挂挂qq平台正式版演示(送程序) - [啊挂] 链接地址: http://www.77169.org/donghua/HTML/20188.html
电影变****远程主机满天飞 - [小马] 链接地址: http://www.77169.org/donghua/HTML/20187.html
热血江湖****生成器 - [随爱飞翔] 链接地址: http://www.77169.org/Soft/HTML/20186.html
幽灵本地记录版 - [小熊] 链接地址: http://www.77169.org/Soft/HTML/20185.html
QQ挂机大王测试版 - [QQ挂] 链接地址: http://www.77169.org/Soft/HTML/20184.html
zxylove网页****生成器 - [仙桃] 链接地址: http://www.77169.org/Soft/HTML/20183.html
检测中的大惊 - [小鬼头] 链接地址: http://www.77169.org/donghua/HTML/20182.html
灰鸽子破解+自动上线详细教程 - [一地鸡毛] 链接地址: http://www.77169.org/donghua/HTML/20181.html
将图片大小压缩极至 - [封之伤] 链接地址: http://www.77169.org/donghua/HTML/20180.html
Linux高级安全设置(PDG) - [xp16] 链接地址: http://www.77169.org/Soft/HTML/20179.html
Windows 2000活动目录开发人员参考库 - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20178.html
百世经纶一页书RADMIN生成器 - [百世经纶一页书] 链接地址: http://www.77169.org/Soft/HTML/20177.html
灰鸽子在线升级服务端+演示 - [netKnave] 链接地址: http://www.77169.org/Soft/HTML/20176.html
梦幻西游****生成器 - [追风箭] 链接地址: http://www.77169.org/Soft/HTML/20175.html
163vv音乐小偷 1.0 正式版 - [诚实的农民] 链接地址: http://www.77169.org/Soft/HTML/20174.html
Photoshop CS2 9.0 绿色中文增强版 - [未知]
免费获得泡泡堂点券 - [笨笨] 链接地址: http://www.77169.org/donghua/HTML/20171.html
免费升级****克星 - [无名氏] 链接地址: http://www.77169.org/donghua/HTML/20170.html
非会员QQ的好友克隆 - [黑王] 链接地址: http://www.77169.org/donghua/HTML/20169.html
ms05037漏洞利用工具 - [安全焦点] 链接地址: http://www.77169.org/Soft/HTML/20168.html
麦浪安全网—****检测程序 - [野蛮小孩] 链接地址: http://www.77169.org/Soft/HTML/20167.html
QQ在线查询强制聊天器 - [野蛮小孩] 链接地址: http://www.77169.org/Soft/HTML/20166.html
灰鸽子[企业版]自动上线使用动画教程 - [灰鸽子工作室] 链接地址: http://www.77169.org/donghua/HTML/20163.html
灰鸽子[企业版]主动连接使用动画教程 - [灰鸽子工作室] 链接地址: http://www.77169.org/donghua/HTML/20162.html
Understand For C++ v1.4.313 Final 正式版 - [undeers]
路由器端口映射教程 - [262583] 链接地址: http://www.77169.org/donghua/HTML/20160.html
免费领养QQ宠物 - [封之伤] 链接地址: http://www.77169.org/donghua/HTML/20159.html
如何盗取远程主机ADSL帐号密码 - [Fmuer] 链接地址: http://www.77169.org/donghua/HTML/20158.html
北信源VRV 2005 纯DOS版 + GUI图形版 v7.15 Final 免费版 - [北信源] 链接地址: http://www.77169.org/Soft/HTML/20157.html
灰鸽子远程控制[企业版]Build 050712 - [校盟] 链接地址: http://www.77169.org/Soft/HTML/20156.html
校盟冷月飞刀CmdShell后门程序 - [校盟] 链接地址: http://www.77169.org/Soft/HTML/20155.html
劲舞团冲钱新法(7.15) - [童童] 链接地址: http://www.77169.org/donghua/HTML/20153.html
隐藏还原精灵 - [无泪的天使] 链接地址: http://www.77169.org/donghua/HTML/20152.html
QQ虚拟摄相头另一种开法 - [笨猪] 链接地址: http://www.77169.org/donghua/HTML/20151.html
数据通讯与网络教程 - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20150.html
ip地址管理与子网划分 - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20148.html
黑洞2005专杀工具 - [安天实验室] 链接地址: http://www.77169.org/Soft/HTML/20146.html
惠信新闻4.0SQL版管理员密码修改 - [BADBOY110] 链接地址: http://www.77169.org/Soft/HTML/20145.html
7.12最新冲QB - [传说中的馒头] 链接地址: http://www.77169.org/donghua/HTML/20143.html
劲舞团冲钱(新) - [慕容呆呆] 链接地址: http://www.77169.org/donghua/HTML/20142.html
Google Hacker 之二 - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20140.html
windows Server 2003 简明使用手册(CHM) - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20139.html
潜入者修改免杀版 - [个人家园] 链接地址: http://www.77169.org/Soft/HTML/20138.html
多项下载者 - [天空的鱼] 链接地址: http://www.77169.org/Soft/HTML/20137.html
热血江湖V125****生成器 - [QQQ] 链接地址: http://www.77169.org/Soft/HTML/20136.html
通信原理概论15 - [西南交通大学] 链接地址: http://www.77169.org/video/HTML/20134.html
通信原理概论14 - [西南交通大学] 链接地址: http://www.77169.org/video/HTML/20133.html&bsp;
通信原理概论13 - [西南交通大学] 链接地址: http://www.77169.org/video/HTML/20132.html
通信原理概论12 - [西南交通大学] 链接地址: http://www.77169.org/video/HTML/20131.html
通信原理概论11 - [西南交通大学] 链接地址: http://www.77169.org/video/HTML/20130.html
通信原理概论10 - [西南交通大学] 链接地址: http://www.77169.org/video/HTML/20129.html
通信原理概论9 - [西南交通大学] 链接地址: http://www.77169.org/video/HTML/20128.html
通信原理概论8 - [西南交通大学] 链接地址: http://www.77169.org/video/HTML/20127.html
灰鸽子破解器正式版动画 - [punkwang] 链接地址: http://www.77169.org/donghua/HTML/20126.html
QQ秀随便任你穿 - [Fmuer] 链接地址: http://www.77169.org/donghua/HTML/20125.html
手工破解DJ网站会员密码 - [Fmuer] 链接地址: http://www.77169.org/donghua/HTML/20124.html
利用BT狂扫远程主机--菜鸟篇! - [Fmuer] 链接地址: http://www.77169.org/donghua/HTML/20123.html
超级菜鸟黑客速成chm版图文教程 - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20122.html
QQ宠物保姆1.1正式版 - [未知] 链接地址: http://www.77169.org/Soft/HTML/20121.html
不用WSH和FSO的ASP**** - [hididi.net] 链接地址: http://www.77169.org/Soft/HTML/20120.html
呆呆IIS防盗链扩展版 v2.0 - [呆呆] 链接地址: http://www.77169.org/Soft/HTML/20119.html
华夏黑客同盟电子书第十五期 - [华夏黑客同盟] 链接地址: http://www.77169.org/Soft/HTML/20118.html
如何抢黑友的WEBSHELL - [ 謿 刨 ] 链接地址: http://www.77169.org/donghua/HTML/20117.html
任何QQ挂机客户端轻松挂 - [幸福每一秒] 链接地址: http://www.77169.org/donghua/HTML/20116.html
免费空间变远程主机 - [飘摇风雨] 链接地址: http://www.77169.org/donghua/HTML/20115.html
****清除百种方法 - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20114.html
神气儿2.2修正版 - [飘忽不定] 链接地址: http://www.77169.org/Soft/HTML/20113.html
冬日之恋4.0 未加壳版 - [特南克斯] 链接地址: http://www.77169.org/Soft/HTML/20112.html
无花果QQ号码窃听器 - [无花果] 链接地址: http://www.77169.org/Soft/HTML/20111.html
叫别人QQ狂掉线 - [佳风] 链接地址: http://www.77169.org/donghua/HTML/20110.html
入侵HTML网页 - [笨猪] 链接地址: http://www.77169.org/donghua/HTML/20109.html
免费取得黄钻高级会员 - [封之伤] 链接地址: http://www.77169.org/donghua/HTML/20108.html
ASP漏洞集合 - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20107.html
ASP与SQL Server网站架设(PDF) - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20106.html
灰鸽子破解器测试版 - [punkwang]
清风专版QQ大盗 - [清风] 链接地址: http://www.77169.org/Soft/HTML/20104.html
手机轰炸机纪念版 - [吉林edu] 链接地址: http://www.77169.org/Soft/HTML/20103.html
热血江湖****生成器 - [QQQ] 链接地址: http://www.77169.org/Soft/HTML/20102.html
私人文件保密专家注册版 - [未知] 链接地址: http://www.77169.org/Soft/HTML/20101.html
动网论坛(DVBBS)V7.1.0原装商业MSSQL数据还原版 - [未知] 链接地址: http://www.77169.org/Soft/HTML/20100.html
彩影 V1.0 - [未知] 链接地址: http://www.77169.org/Soft/HTML/20099.html
Cain & Abel v2.7 for Windows NT/2000/XP - [未知] 链接地址: http://www.77169.org/Soft/HTML/20098.html
BlackICE Server Protection 3.6.coh 注册版 - [未知]
BlackICE ** Protection 3.6.coh 注册版 - [未知] 链接地址: http://www.77169.org/Soft/HTML/20096.html
Anti ARP Sniffer Ver 1.0 - [未知] 链接地址: http://www.77169.org/Soft/HTML/20095.html
天网防火墙 V2.7.5.1000 Build 0629&bsp;破解版 - [未知] 链接地址: http://www.77169.org/Soft/HTML/20094.html
windows优化大师 V6.7 Build 5.708 注册版 - [未知] 链接地址: http://www.77169.org/Soft/HTML/20093.html
逆火Web日志分析器 V1.6 - [佚名]
瑞星杀毒软件(RAV) 2005 v17.34.40 Final 多国语言[简繁中文]正式版 [荐] - [ring]
EMS MySQL Manager Professional v2.8.7.1 Final 多国语言[简繁中文]专业版 - [MySQL Manager]
无需回答问题直接拿靓号 - [风的季节] 链接地址: http://www.77169.org/donghua/HTML/20089.html
大家都来做新型**** - [无zhi心B.H.S.T] 链接地址: http://www.77169.org/donghua/HTML/20088.html
超级入侵之各种服务开启 - [笨猪] 链接地址: http://www.77169.org/donghua/HTML/20087.html
网络互连_网桥.路由器.交换机和互连协议 - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20086.html
网络连接服务开发人员参考库(第5卷)路由 - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20085.html
免杀版-替换3389终端服务 - [布衣] 链接地址: http://www.77169.org/Soft/HTML/20084.html
QQ宠物挂机伴侣 for 0707 - [未知] 链接地址: http://www.77169.org/Soft/HTML/20083.html
黑失败 3.3正式版 - [黑失败] 链接地址: http://www.77169.org/Soft/HTML/20082.html
轻松盗取QQ密码 - [China@] 链接地址: http://www.77169.org/donghua/HTML/20081.html
内存免杀演示 - [红客] 链接地址: http://www.77169.org/donghua/HTML/20080.html
挂QQ就这么简单 - [阿挂] 链接地址: http://www.77169.org/donghua/HTML/20079.html
图形设计基础教程 - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20078.html
Photoshop特效制作 - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20077.html
阿D工具包2.01 - [啊D] 链接地址: http://www.77169.org/Soft/HTML/20076.html
QQ IP数据库 BuBuild 0705 纯真版 - [cz88] 链接地址: http://www.77169.org/Soft/HTML/20075.html
卡巴斯基反病毒单机中文版 5.0.372+升级包 - [卡巴] 链接地址: http://www.77169.org/Soft/HTML/20074.html
免费得QB (不是冲QB) - [幸福每一秒] 链接地址: http://www.77169.org/donghua/HTML/20072.html
简单的修改个人的ys168空间 - [ 謿 刨] 链接地址: http://www.77169.org/donghua/HTML/20071.html
盛大密宝破解软件 - [毛嘉利] 链接地址: http://www.77169.org/Soft/HTML/20069.html
C++ Builder高级编程技术 - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20068.html
C++ Builder核心编程技术 - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20067.html
Cybernetic V1.0.1强悍的**** - [Darkmoon] 链接地址: http://www.77169.org/Soft/HTML/20066.html
网络神偷免费防杀修正版 - [小熊] 链接地址: http://www.77169.org/Soft/HTML/20065.html
通信原理概论7 - [西南交通大学] 链接地址: http://www.77169.org/video/HTML/20064.html
通信原理概论6 - [西南交通大学] 链接地址: http://www.77169.org/video/HTML/20063.html
通信原理概论5 - [西南交通大学] 链接地址: http://www.77169.org/video/HTML/20062.html
利用ewebeditor得到webshell - [Titan] 链接地址: http://www.77169.org/donghua/HTML/20061.html
免费得会员和礼包 - [小奥] 链接地址: http://www.77169.org/donghua/HTML/20060.html
非QQ会员也可在群无限贴图 - [幸福每一秒] 链接地址: http://www.77169.org/donghua/HTML/20059.html
华夏会员期刊第2期 - [华夏黑客同盟]
IPSEC:新一代因特网安全标准 - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20057.html
封神榜正式版****生成器 - [追风箭] 链接地址: http://www.77169.org/Soft/HTML/20056.html
Nethief发布的免费防杀版 - [小熊] 链接地址: http://www.77169.org/Soft/HTML/20055.html
腾讯QQ 2005 Beta 2 狂人DIY版 Build 050702 - [狂人] 链接地址: http://www.77169.org/Soft/HTML/20054.html
碰到死鸡产生的思路 - [262583] 链接地址: http://www.77169.org/donghua/HTML/20053.html
最新鸽子破解+动画 - [天剑] 链接地址: http://www.77169.org/donghua/HTML/20052.html
防ping四步走MM语音版 - [xp163] 链接地址: http://www.77169.org/donghua/HTML/20051.html
千兆以太网实施案例 - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20050.html
各种网络方案素材 - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20049.html
0bug0.1(加壳工具) - [x140xu4n] 链接地址: http://www.77169.org/Soft/HTML/20048.html
QQ脱机挂平台0.5破解版 - [来自火狐] 链接地址: http://www.77169.org/Soft/HTML/20047.html
binder v1.01(捆绑机) - [火狐] 链接地址: http://www.77169.org/Soft/HTML/20046.html
FLUX特别汉化版本的配置和使用 - [拒绝服务] 链接地址: http://www.77169.org/donghua/HTML/20045.html
MeChat的另类权限 - [E网鸡仔] 链接地址: http://www.77169.org/donghua/HTML/20044.html
百分百冲网络游戏点卡点卷录象 - [我爱你晓坤] 链接地址: http://www.77169.org/donghua/HTML/20043.html
科龙电器网站方案书 - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20042.html
计算机网络(1-20章) - [xp163] 链接地址: http://www.77169.org/Soft/HTML/20041.html
xxxtoxxx 转换工具 - [邪恶八进制收集] 链接地址: http://www.77169.org/Soft/HTML/20040.html
大陆魔兽****生成器 - [追风箭] 链接地址: http://www.77169.org/Soft/HTML/20039.html
Serv-U FTP Server 6.1.0.1 Final 英文企业版 - [serv-u] 链接地址: http://www.77169.org/Soft/HTML/20038.html
动网不用后台照样**** - [童童] 链接地址: http://www.77169.org/donghua/HTML/20037.html 最新冲黄钻 - [滨海] 链接地址: http://www.77169.org/donghua/HTML/20036
- 作者: freeopinion 2008年06月5日, 星期四 15:17 回复(0) | 引用(0) 加入博采
网站入侵教程之三
9. 接下来我们要找到他们的后台!啊D也带了这个功能 看左侧第三个按钮 【管理入口检测】,点击后如图! ![]() 10.然后单击右侧【检测管理入口】,出现如图 ![]() 好我们已经检测出来了,然后用IE打开第一个网址出现了,如图! ![]() 然后把刚才检测出来的用户名和密码输入进去!就可以登陆它的后台了!进去后你可以上传个ASP木马!~~控制!这里我就不在详细说明了! 现在这个网站就是你的了!别干坏事这个教程只是用来时间理论的!好教程到此结束了! |
- 作者: freeopinion 2008年06月5日, 星期四 15:08 回复(0) | 引用(0) 加入博采
网站入侵教程之二




- 作者: freeopinion 2008年06月5日, 星期四 15:06 回复(0) | 引用(0) 加入博采
网站入侵
- 作者: freeopinion 2008年06月5日, 星期四 15:01 回复(0) | 引用(0) 加入博采
BAT批处理文件语法
==== 注 ======================================= .bat是dos下的批处理文件 .cmd是nt内核命令行环境的另一种批处理文件 从 更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由 专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。所以从某个程度分析,batch, unix shell, awk, basic, perl 等脚本语言都是一样的,只不过应用的范围和解释的平台各有不同而已。甚至有些应用程序仍然沿用批处理这一称呼,而其内容和扩展 名与dos的批处理却又完全不同。 =================================== 首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。 ==== 注 =================== 批 处理文件中完全可以使用非dos命令,甚至可以使用不具有可执行特性的普通数据性文件,这缘于windows系统这个新型解释平台的涉入,使得批处理的应 用越来越"边缘化"。所以我们讨论的批处理应该限定在dos环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动。 ======================== 其 次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来 循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括 内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。 ==== 注 ================== 批处 理文件(batch file)也可以称之为批处理程序(batch program),这一点与编译型语言有所不同,就c语言来说,扩展名为c或者 cpp的文件可以称之为c语言文件或者c语言源代码,但只有编译连接后的exe文件才可以称之为c语言程序。因为批处理文件本身既具有文本的可读性,又具 有程序的可执行性,这些称谓的界限是比较模糊的。 =========================== 第三,每个编写好 的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在 硬盘上建立一个bat或者batch目录(例如C:\BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:\ batch,你就可以在任意位置运行所有你编写的批处理程序。 ==== 注 ===== 纯以dos系统而言,可执行程序大约 可以细分为五类,依照执行优先级由高到低排列分别是:DOSKEY宏命令(预先驻留内存),COMMAND.COM中的内部命令(根据内存的环境随时进驻 内存),以com为扩展名的可执行程序(由command.com 直接载入内存),以exe位扩展名的可执行程序(由command.com 重定位后 载入内存),以bat位扩展名的批处理程序(由command.com 解释分析,根据其内容按优先级顺序调用第2,3,4,5种可执行程序,分析一行, 执行一行,文件本身不载入内存) ============ 第四,在DOS和Win9x/Me系统下,C:盘根目录下的 AUTOEXEC.BAT批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文件中,例如设 置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。下面是一个运行于Windows 98下的autoexec.bat的示例: @ECHO OFF PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools; C:\SYSTOOLS;C:\WINTOOLS;C:\BATCH LH SMARTDRV.EXE /X LH DOSKEY.COM /insert LH CTMOUSE.EXE SET TEMP=D:\TEMP SET TMP=D:\TEMP ==== 注 ===== AUTOEXEC.BAT为DOS系统的自动运行批处理文件,由COMMAND.COM启动时解释执行; 而在Win9x环境中,不仅增加支持了 DOSSTART.BAT, WINSTART.BAT 等许多其它自动运行的批处理文件,对AUTOEXEC.BAT 也增加了 .DOS .W40 .BAK .OLD .PWS 等许多变体以适应复杂的环境和多变的需求。 ==== willsort 编注 ============= 以 下关于命令的分类,有很多值得推敲的地方。常用命令中的@本不是命令,而dir、copy等也很常用的命令却没有列入, 而特殊命令中所有命令对我来说都 是常用命令。建议将批处理所引用的命令分为内部命令、外部命令、第三方程序三类。而内部命令和外部命令中别有一类是专用于或常用于批处理中的命令可称之为 "批处理命令"。 以下摘录MS-DOS 6.22 帮助文档中关于"批处理命令"的文字,当然,其中有些概念和定义已经有些落后了。 批处理命令 批处理文件或批处理程序是一个包含若干MS-DOS命令的正文文件,扩展名为.BAT。当在命令提示符下敲入批处理程序的名称时,MS-DOS成组执行此批处理程序中的命令。 任何在命令提示符下可使用的命令都可用在批处理程序中。此外,下面MS-DOS命令是专门在批处理程序中使用的。 ========== 常用命令 echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。 ==== 注 =========== 首先, @ 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 下面是DOS命令行或批处理中可能会见到的一些特殊标记符: CR(0D) 命令行结束符 Escape(1B) ANSI转义字符引导符 Space(20) 常用的参数界定符 Tab(09) ; = 不常用的参数界定符 + COPY命令文件连接符 * ? 文件通配符 "" 字符串界定符 | 命令管道符 < > >> 文件重定向符 @ 命令行回显屏蔽符 / 参数开关引导符 : 批处理标签引导符 % 批处理变量引导符 其次, :: 确实可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意: 第一, 除了 :: 之外, 任何以 :开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容, 只是为了与正常的标号相区别, 建议使用 goto 所无法识别的标号, 即在 :后紧跟一个非字母数字的一个特殊符号. 第 二, 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态, 因为命令解释器不认为他是一个有效的命 令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中. ===================== echo 表示显示此命令后字符 echo off 表示在此语句后所有运行的命令都不显示命令行本身 @与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。 call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。 pause 运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续 rem 表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释)。 ==== 注 ===== 此处的描述较为混乱, 不如直接引用个命令的命令行帮助更为条理 ------------------------- ECHO 当程序运行时,显示或隐藏批处理程序中的正文。也可用于允许或禁止命令的回显。 在运行批处理程序时,MS-DOS一般在屏幕上显示(回显)批处理程序中的命令。 使用ECHO命令可关闭此功能。 语法 ECHO [ON|OFF] 若要用echo命令显示一条命令,可用下述语法: echo [message] 参数 ON|OFF 指定是否允许命令的回显。若要显示当前的ECHO的设置,可使用不带参数的ECHO 命令。 message 指定让MS-DOS在屏幕上显示的正文。 ------------------- CALL 从一个批处理程序中调用另一个批处理程序,而不会引起第一个批处理的中止。 语法 CALL [drive:][path]filename [batch-parameters] 参数 [drive:][path]filename 指定要调用的批处理程序的名字及其存放处。文件名必须用.BAT作扩展名。 batch-parameters 指定批处理程序所需的命令行信息。 ------------------------------- PAUSE 暂停批处理程序的执行并显示一条消息,提示用户按任意键继续执行。只能在批处 理程序中使用该命令。 语法 PAUSE REM 在批处理文件或CONFIG.SYS中加入注解。也可用REM命令来屏蔽命令(在CONFIG.SYS 中也可以用分号 ; 代替REM命令,但在批处理文件中则不能替代)。 语法 REM [string] 参数 string 指定要屏蔽的命令或要包含的注解。 ======================= 例1:用edit编辑a.bat文件,输入下列内容后存盘为c:\a.bat,执行该批处理文件后可实现:将根目录中所有文件写入 a.txt中,启动UCDOS,进入WPS等功能。 批处理文件的内容为: 命令注释: @echo off 不显示后续命令行及当前命令行 dir c:\*.* >a.txt 将c盘文件列表写入a.txt call c:\ucdos\ucdos.bat 调用ucdos echo 你好 显示"你好" pause 暂停,等待按键继续 rem 准备运行wps 注释:准备运行wps cd ucdos 进入ucdos目录 wps 运行wps 批处理文件的参数 批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符"%"。 %[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。 例2:C:根目录下有一批处理文件名为f.bat,内容为: @echo off format %1 如果执行C:\>f a: 那么在执行f.bat时,%1就表示a:,这样format %1就相当于format a:,于是上面的命令运行时实际执行的是format a: 例3:C:根目录下一批处理文件名为t.bat,内容为: @echo off type %1 type %2 那么运行C:\>t a.txt b.txt %1 : 表示a.txt %2 : 表示b.txt 于是上面的命令将顺序地显示a.txt和b.txt文件的内容。 ==== 注 =============== 参 数在批处理中也作为变量处理, 所以同样使用百分号作为引导符, 其后跟0-9中的一个数字构成参数引用符. 引用符和参数之间 (例如上文中的 %1 与 a: ) 的关系类似于变量指针与变量值的关系. 当我们要引用第十一个或更多个参数时, 就必须移动DOS 的参数起始指针. shift 命令正 充当了这个移动指针的角色, 它将参数的起始指针移动到下一个参数, 类似C 语言中的指针操作. 图示如下: 初始状态, cmd 为命令名, 可以用 %0 引用 cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ | | | | | | | | | | %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 经过1次shift后, cmd 将无法被引用 cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ | | | | | | | | | | %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 经过2次shift后, arg1也被废弃, %9指向为空, 没有引用意义 cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 ^ ^ ^ ^ ^ ^ ^ ^ ^ | | | | | | | | | %0 %1 %2 %3 %4 %5 %6 %7 %8 遗憾的是, win9x 和DOS下均不支持 shift 的逆操作. 只有在 nt 内核命令行环境下, shift 才支持 /n 参数, 可以以第一参数为基准返复移动起始指针. ================= 特殊命令 if goto choice for是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。 一、if 是条件语句,用来判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式: 1、if [not] "参数" == "字符串" 待执行的命令 参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。 例:if "%1"=="a" format a: ==== if 的命令行帮助中关于此点的描述为: IF [NOT] string1==string2 command 在此有以下几点需要注意: 1. 包含字符串的双引号不是语法所必须的, 而只是习惯上使用的一种"防空"字符 2. string1 未必是参数, 它也可以是环境变量, 循环变量以及其他字符串常量或变量 3. command 不是语法所必须的, string2 后跟一个空格就可以构成一个有效的命令行 ============================= 2、if [not] exist [路径\]文件名 待执行的命令 如果有指定的文件,则条件成立,运行命令,否则运行下一句。 如: if exist c:\config.sys type c:\config.sys 表示如果存在c:\config.sys文件,则显示它的内容。 ****** 注 ******** 也可以使用以下的用法: if exist command device 是指DOS系统中已加载的设备, 在win98下通常有: AUX, PRN, CON, NUL COM1, COM2, COM3, COM4 LPT1, LPT2, LPT3, LPT4 XMSXXXX0, EMMXXXX0 A: B: C: ..., CLOCK$, CONFIG$, DblBuff$, IFS$HLP$ 具体的内容会因硬软件环境的不同而略有差异, 使用这些设备名称时, 需要保证以下三点: 1. 该设备确实存在(由软件虚拟的设备除外) 2. 该设备驱动程序已加载(aux, prn等标准设备由系统缺省定义) 3. 该设备已准备好(主要是指a: b: ..., com1..., lpt1...等) 可通过命令 mem/d | find "device" /i 来检阅你的系统中所加载的设备 另 外, 在DOS系统中, 设备也被认为是一种特殊的文件, 而文件也可以称作字符设备; 因为设备(device)与文件都是使用句柄(handle)来 管理的, 句柄就是名字, 类似于文件名, 只不过句柄不是应用于磁盘管理, 而是应用于内存管理而已, 所谓设备加载也即指在内存中为其分配可引用的句 柄. ================================== 3、if errorlevel <数字> 待执行的命令 很 多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),通过if errorlevel命令可以判断程序的返回值,根据不同的返 回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。 如if errorlevel 2 goto x2 ==== 注 =========== 返回值从大到小的顺序排列不是必须的, 而只是执行命令为 goto 时的习惯用法, 当使用 set 作为执行命令时, 通常会从小到大顺序排列, 比如需将返回码置入环境变量, 就需使用以下的顺序形式: if errorlevel 1 set el=1 if errorlevel 2 set el=2 if errorlevel 3 set el=3 if errorlevel 4 set el=4 if errorlevel 5 set el=5 ... 当然, 也可以使用以下循环来替代, 原理是一致的: for %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e 更高效简洁的用法, 可以参考我写的另一篇关于获取 errorlevel 的文章 出 现此种现象的原因是, if errorlevel 比较返回码的判断条件并非等于, 而是大于等于. 由于 goto 的跳转特性, 由小到大排序会导 致在较小的返回码处就跳出; 而由于 set命令的 "重复" 赋值特性, 由大到小排序会导致较小的返回码 "覆盖" 较大的返回码. 另外, 虽然 if errorlevel=<数字> command 也是有效的令行, 但也只是 command.com 解释命令行时将 = 作为命令行切分符而忽略掉罢了 =========================== 二、goto 批处理文件运行到这里将跳到goto所指定的标号(标号即label,标号用:后跟标准字符串来定义)处,goto语句一般与if配合使用,根据不同的条件来执行不同的命令组。 如: goto end :end echo this is the end 标号用":字符串"来定义,标号所在行不被执行。 ==== 编注 label 常被译为 "标签" , 但是这并不具有广泛的约定性. goto 与 : 联用可实现执行中途的跳转, 再结合 if 可实现执行过程的条件分支, 多个 if 即可实现命令的分组, 类似 C 中 switch case 结构或者 Basic 中的 select case 结构, 大规模且结构化的命令分组即可实现高级语言中的函数功能. 以 下是批处理和C/Basic在语法结构上的对照: Batch C / Basic goto&: goto&: goto&:&if if{}&else{} / if&elseif&endif goto&:&if... switch&case / select case goto&:&if&set&envar... function() / function(),sub() ================================== 三、choice 使用此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的errorlevel,然后于if errorlevel配合,根据用户的选择运行不同的命令。 注意:choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请用choice /?查看用法。 choice的命令语法(该语法为Windows 2003中choice命令的语法,其它版本的choice的命令语法与此大同小异): CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text] 描述: 该工具允许用户从选择列表选择一个项目并返回所选项目的索引。 参数列表: /C choices 指定要创建的选项列表。默认列表是 "YN"。 /N 在提示符中隐藏选项列表。提示前面的消息得到显示, 选项依旧处于启用状态。 /CS 允许选择分大小写的选项。在默认情况下,这个工具 是不分大小写的。 /T timeout 做出默认选择之前,暂停的秒数。可接受的值是从 0 到 9999。如果指定了 0,就不会有暂停,默认选项 会得到选择。 /D choice 在 nnnn 秒之后指定默认选项。字符必须在用 /C 选 项指定的一组选择中; 同时,必须用 /T 指定 nnnn。 /M text 指定提示之前要显示的消息。如果没有指定,工具只 显示提示。 /? 显示帮助消息。 注意: ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选 择返回 1,第二个选择返回 2,等等。如果用户按的键不是有效的选择, 该工具会发出警告响声。如果该工具检测到错误状态,它会返回 255 的 ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键,该工具会返回 0 的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时,将参数降 序排列。 示例: CHOICE /? CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。" CHOICE /T 10 /C ync /CS /D y CHOICE /C ab /M "选项 1 请选择 a,选项 2 请选择 b。" CHOICE /C ab /N /M "选项 1 请选择 a,选项 2 请选择 b。" ==== 编注 =============================== 我列出win98下choice的用法帮助, 已资区分 Waits for the user to choose one of a set of choices. 等待用户选择一组待选字符中的一个 CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text] /C[:]choices Specifies allowable keys. Default is YN 指定允许的按键(待选字符), 默认为YN /N Do not display choices and ? at end of prompt string. 不显示提示字符串中的问号和待选字符 /S Treat choice keys as case sensitive. 处理待选字符时大小写敏感 /T[:]c,nn Default choice to c after nn seconds 在 nn 秒后默认选择 c text Prompt string to display 要显示的提示字符串 ERRORLEVEL is set to offset of key user presses in choices. ERRORLEVEL 被设置为用户键入的字符在待选字符中的偏移值 如果我运行命令:CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。" 屏幕上会显示: 确认请按 Y,否请按 N,或者取消请按 C。 [Y,N,C]? 例:test.bat的内容如下(注意,用if errorlevel判断返回值时,要按返回值从高到低排列): @echo off choice /C dme /M "defrag,mem,end" if errorlevel 3 goto end if errorlevel 2 goto mem if errorlevel 1 goto defrag :defrag c:\dos\defrag goto end :mem mem goto end :end echo good bye 此 批处理运行后,将显示"defrag,mem,end[D,M,E]?" ,用户可选择d m e ,然后if语句根据用户的选择作出判断,d表示执行标 号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号 处,然后程序将显示good bye,批处理运行结束。 四、for 循环命令,只要条件符合,它将多次执行同一命令。 语法: 对一组文件中的每一个文件执行某个特定命令。 FOR %%variable IN (set) DO command [command-parameters] %%variable 指定一个单一字母可替换的参数。 (set) 指定一个或一组文件。可以使用通配符。 command 指定对每个文件执行的命令。 command-parameters 为特定命令指定参数或命令行开关。 例如一个批处理文件中有一行: for %%c in (*.bat *.txt) do type %%c 则该命令行会显示当前目录下所有以bat和txt为扩展名的文件的内容。 ==== 编注 =========================================== 需要指出的是, 当()中的字符串并非单个或多个文件名时, 它将单纯被当作字符串替换, 这个特性再加上()中可以嵌入多个字符串的特性, 很明显 for 可以被看作一种遍历型循环. 当然, 在 nt/2000/xp/2003 系列的命令行环境中, for 被赋予了更多的特性, 使之可以分析命令输出或者文件中的字符串, 也有很多开关被用于扩展了文件替换功能. ======================================================= 批处理示例 1. IF-EXIST 1) 首先用记事本在C:\建立一个test1.bat批处理文件,文件内容如下: @echo off IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist 然后运行它: C:\>TEST1.BAT 如果C:\存在AUTOEXEC.BAT文件,那么它的内容就会被显示出来,如果不存在,批处理就会提示你该文件不存在。 2) 接着再建立一个test2.bat文件,内容如下: @ECHO OFF IF EXIST \%1 TYPE \%1 IF NOT EXIST \%1 ECHO \%1 does not exist 执行: C:\>TEST2 AUTOEXEC.BAT 该命令运行结果同上。 说明: (1) IF EXIST 是用来测试文件是否存在的,格式为 IF EXIST [路径+文件名] 命令 (2) test2.bat文件中的%1是参数,DOS允许传递9个批参数信息给批处理文件,分别为%1~%9(%0表示test2命令本身) ,这有点象编程中的实参和形参的关系,%1是形参,AUTOEXEC.BAT是实参。 ==== willsort 编注 =========================================== DOS没有 "允许传递9个批参数信息" 的限制, 参数的个数只会受到命令行长度和所调用命令处理能力的限制. 但是, 我们在批处理程序中, 在同一时刻只能同时引用10个参数, 因为 DOS只给出了 %0~%9这十个参数引用符. ======================================================= 3) 更进一步的,建立一个名为TEST3.BAT的文件,内容如下: @echo off IF "%1" == "A" ECHO XIAO IF "%2" == "B" ECHO TIAN IF "%3" == "C" ECHO XIN 如果运行: C:\>TEST3 A B C 屏幕上会显示: XIAO TIAN XIN 如果运行: C:\>TEST3 A B 屏幕上会显示 XIAO TIAN 在这个命令执行过程中,DOS会将一个空字符串指定给参数%3。 2、IF-ERRORLEVEL 建立TEST4.BAT,内容如下: @ECHO OFF XCOPY C:\AUTOEXEC.BAT D:\ IF ERRORLEVEL 1 ECHO 文件拷贝失败 IF ERRORLEVEL 0 ECHO 成功拷贝文件 然后执行文件: C:\>TEST4 如果文件拷贝成功,屏幕就会显示"成功拷贝文件",否则就会显示"文件拷贝失败"。 IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。 因此下面的批处理文件是错误的: @ECHO OFF XCOPY C:\AUTOEXEC.BAT D:\ IF ERRORLEVEL 0 ECHO 成功拷贝文件 IF ERRORLEVEL 1 ECHO 未找到拷贝文件 IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止贝操作 IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作 IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误 无论拷贝是否成功,后面的: 未找到拷贝文件 用户通过ctrl-c中止拷贝操作 预置错误阻止文件拷贝操作 拷贝过程中写盘错误 都将显示出来。 以下就是几个常用命令的返回值及其代表的意义: backup 0 备份成功 1 未找到备份文件 2 文件共享冲突阻止备份完成 3 用户用ctrl-c中止备份 4 由于致命的错误使备份操作中止 diskcomp 0 盘比较相同 1 盘比较不同 2 用户通过ctrl-c中止比较操作 3 由于致命的错误使比较操作中止 4 预置错误中止比较 diskcopy 0 盘拷贝操作成功 1 非致命盘读/写错 2 用户通过ctrl-c结束拷贝操作 3 因致命的处理错误使盘拷贝中止 4 预置错误阻止拷贝操作 format 0 格式化成功 3 用户通过ctrl-c中止格式化处理 4 因致命的处理错误使格式化中止 5 在提示"proceed with format(y/n)?"下用户键入n结束 xcopy 0 成功拷贝文件 1 未找到拷贝文件 2 用户通过ctrl-c中止拷贝操作 4 预置错误阻止文件拷贝操作 5 拷贝过程中写盘错误 chkdsk 0 未找到错误 255 找到一个或多个错误 choice 0 用户按下ctrl+c/break 1 用户按下第一个键 255 检测到命令行中的错误条件 其它 用户按下的有效字符在列表中的位置 defrag 0 碎片压缩成功 1 出现内部错误 2 磁盘上没有空簇。要运行DEFRAG,至少要有一个空簇 3 用户用Ctrl+C退出了DEFRAG 4 出现一般性错误 5 DEFRAG在读簇时遇到错误 6 DEFRAG在写簇时遇到错误 7 分配空间有错 8 内存错 9 没有足够空间来压缩磁盘碎片 deltree 0 成功地删除一个目录 diskcomp 0 两盘相同 1 发现不同 2 按CTRL+C 终止了比较 3 出现严重错误 4 出现初始化错误 find 0 查找成功且至少找到了一个匹配的字符串 1 查找成功但没找到匹配的字符串 2 查找中出现了错误 keyb 0 键盘定义文件装入成功 1 使用了非法的键盘代码,字符集或语法 2 键盘定义文件坏或未找到 4 键盘、监视器通讯时出错 5 要求的字符集未准备好 move 0 成功地移动了指定的文件 1 发生了错误 msav /N 86 检查到了病毒 replace 0 REPLACE成功地替换或加入了文件 1 MS-DOS版本和REPLACE不兼容 2 REPLACE找不到源文件 3 REPLACE找不到源路径或目标路径 5 不能存取要替换的文件 8 内存不够无法执行REPLACE 11 命令行句法错误 restore 0 RESTORE成功地恢复了文件 1 RESTORE找不到要恢复的文件 3 用户按CTRL+C终止恢复过程 4 RESTORE因错误而终止 scandisk 0 ScanDisk在它检查的驱动器上未检测到任何错误 1 由于命令行的语法不对,不能运行ScanDisk 2 由于内存用尽或发生内部错误,ScanDisk意外终止 3 用户让ScanDisk中途退出 4 进行盘面扫描时,用户决定提前退出 254 ScanDisk找到磁盘故障并已全部校正 255 ScanDisk找到磁盘故障,但未能全部校正 setver 0 SETVER成功地完成了任务 1 用户指定了一个无效的命令开关 2 用户指定了一个非法的文件名 3 没有足够的系统内存来运行命令 4 用户指定了一个非法的版本号格式 5 SETVER在版本表中未找到指定的项 6 SETVER未找到SETVER.EXE文件 7 用户指定了一个非法的驱动器 8 用户指定了太多的命令行参数 9 SETVER检测到丢失了命令行参数 10 在读SETVER.EXE文件时,SETVER检测到发生错误 11 SETVER.EXE文件损坏 12 指定的SETVER.EXE文件不支持版本表 13 版本表中没有足够的空间存放新的项 14 在写SETVER.EXE文件时SETVER检测到发生错误 ======================================================= 3、IF STRING1 == STRING2 建立TEST5.BAT,文件内容如下: @echo off IF "%1" == "A" FORMAT A: 执行: C:\>TEST5 A 屏幕上就出现是否将A:盘格式化的内容。 注意:为了防止参数为空的情况,一般会将字符串用双引号(或者其它符号,注意不能使用保留符号)括起来。 如:if [%1]==[A] 或者 if %1*==A* 5、GOTO 建立TEST6.BAT,文件内容如下: @ECHO OFF IF EXIST C:\AUTOEXEC.BAT GOTO _COPY GOTO _DONE :_COPY COPY C:\AUTOEXEC.BAT D:\ :_DONE 注意: (1) 标号前是ASCII字符的冒号":",冒号与标号之间不能有空格。 (2) 标号的命名规则与文件名的命名规则相同。 (3) DOS支持最长八位字符的标号,当无法区别两个标号时,将跳转至最近的一个标号。 ==== willsort 编注 =========================================== 1)标号也称作标签(label) 2)标签不能以大多数的非字母数字字符开始, 而文件名中则可以使用很多 3)当无法区别两个标签时, 将跳转至位置最靠前的标签 ======================================================= 6、FOR 建立C:\TEST7.BAT,文件内容如下: @ECHO OFF FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C 运行: C:\>TEST7 执行以后,屏幕上会将C:盘根目录下所有以BAT、TXT、SYS为扩展名的文件内容显示出来(不包括隐藏文件)。 -------------------------------------------------------------------------------- 批处理命令实例分析 批 处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文 件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任 务。当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用,例如我们后面要提到的用批处理文件来给系统打补丁、批量植入后门程序等。下面就开始 我们批处理学习之旅吧。 (本文因篇幅较长,所以分成两部份。前半部份讲命令,后半部分讲实例分析。) |
- 作者: freeopinion 2008年06月5日, 星期四 14:57 回复(0) | 引用(0) 加入博采
入侵博客
现在点击"提交"按钮,即可上传木马,如果看到信息"1 files had been uploaded!"则表示文件上传成功.接下来,我们就可以连接上传后的ASP木马进一步渗透攻击,达到控制整个网站服务器的目的.
漏洞三:
SQL注入漏洞
说起SQL注入攻击,可能无人不知,这个红极一时的攻击技术让无数网站纷纷落马,但是谁能保证所有的网站程序都对此进行了防范呢?最起码在Dlog用户根本不重视这一漏洞,到了"提醒"他们的时候了.
第一步,扫描博客中的注入漏洞
我们以搜索到的博客"http://202.112.*.***/dlog/"作为我们的攻击目标.我们可以使用工具(如NBSI 2 SQL自动注入攻击器)进行SQL注入.运行程序,点击工具栏中的"网站扫描",在"网站地址"中输入博客网址,勾选"全面扫描"项,点击"扫描"按钮后,就可以对博客网站中存在的所有注入漏洞进行扫描.该程序很快就找到了许多注入可能性较高的链接,看来这个博客逃不出"注入"的攻击了.
第二步,开始攻击
在扫描结果列表中任意选择一个攻击目标"http"//202.112.*.***/dlog/showlog.asp?log_id=402",然后点击界面下方的"注入分析"按钮进入"注入攻击"页面.点击页面中的"检测"按钮,分析注入漏洞的类型和各种信息.结果却是让人失望的,居然显示"暂为检测到注入漏洞".这是因为管理员可能进行了一些防注入处理,已经过滤掉了一些特殊的字符.
不要紧,我们可以使用最经典的1=1检测法,在注入浏览器地址栏中的末尾处分别加上"and 1=1"和"and 1=2",查看两者返回的页面信息中有什么不同.并记住在"and 1=1"页面中出现过,但是在"and 1=2"页面中未出现的字符串,并将其输入NBSI 2界面的"特征字符"中.
现在点击"再检测"按钮,很快就可看到注入检测的结果.由于数据库是"Access"数据库,所以程序会自动猜解数据库中的表名和列名,点击窗口中的"自动猜解"按钮,即可猜测可能存在的数据库表名,默认的表名为"user_mdb".再利用自动猜解得到表中的列名等数据信息.然后自动猜解表中的用户数据,从而得到管理员的MD5加密密码.最后使用一些MD5密码破解工具进行暴力破解,登录后台管理页面,达到成功入侵的目的.
漏洞四:
Cookies欺骗漏洞
Cookies欺骗属于比较隐蔽一点的脚本漏洞,在众多的博客中,这样的漏洞也是很常见的,面对这一常见漏洞,大家从没关注过,警惕过.
第一步,搜索攻击目标
搜索关键词"Powered by L-Blog",选择"http://***.*****.***/blog/"作为攻击目标.
第二步,查询Cookies信息
我们要用到一款可以修改Cookies信息的工具(如"Cookies&injest").打开程序,输入博客网站的地址并登录,在"Cookies"栏中可以看到当前的Cookies信息,其中包含了我们的登录用户名和密码等信息.
第三步,"欺骗"攻击
现在要对Cookies信息进行修改,欺骗博客程序,使它以为登录用户的身份是管理员.点击工具栏中"Cookies"旁的"锁",此时可直接对Cookies信息进行修改.
我们只修改"memStatus=SupAdmin",其他内容保留,然后继续保持工具栏中的"锁"为按下状态.现在,退出当前的用户登录状态,重新打开该博客首页.此时会显示我们没有登录,然而我们已经拥有了管理员的权限.
博客应加强安全意识
在本文中,我们介绍了博客中几个常见的安全漏洞,以及如何利用这些漏洞对博客进行攻击.事实上,在各种各样的博客程序中或多或少地存在一些安全漏洞.因此,对黑客来说,博客是一个练习人入侵攻击的好战场
- 作者: freeopinion 2007年09月9日, 星期日 13:58 回复(3) | 引用(0) 加入博采
入侵的14种可利用方法
- 作者: freeopinion 2007年09月9日, 星期日 13:52 回复(1) | 引用(0) 加入博采
网络故障70例
1.故障现象:网络适配器(网卡)设置与计算机资源有冲突。
分析、排除:通过调整网卡资源中的IRQ和I/O值来避开与计算机其它资源的冲突。有些情况还需要通过设置主板的跳线来调整与其它资源的冲突。
2.故障现象:网吧局域网中其他客户机在“网上邻居”上都能互相看见,而只有某一台计算机谁也看不见它,它也看不见别的计算机。(前提:该网吧的局域网是通过HUB或交换机连接成星型网络结构)
分析、排除:检查这台计算机系统工作是否正常;检查这台计算机的网络配置;检查这台计算机的网卡是否正常工作;检查这台计算机上的网卡设置与其他资源是否有冲突;检查网线是否断开;检查网线接头接触是否正常。
3.故障现象:网吧局域网中有两个网段,其中一个网网段的所有计算机都不能上因特网。(前提:该网吧的局域网通过两个HUB或交换机连接着两个的网段)
分析、排除:两个网段的干线断了或干线两端的接头接处不良。检查服务器中对该网段的设置项。
4.故障现象:网吧局域网中所有的计算机在“网上邻居”上都能互相看见。(前提:该网吧的局域网是通过HUB或交换机连接成星型网络结构)
分析、排除:检查HUB或交换机工作是否正常。
5.故障现象:网吧局域网中某台客户机在“网上邻居”上都能看到服务器,但就是不能上因特网。(前提:服务器指代理网吧局域网其他客机上因特网的那台计算机,以下同)
分析、排除:检查这台客户机TCP/IP协议的设置,检查这台客户机中IE浏览器的设置,检查服务器中有关对这台客户机的设置项。
6.故障现象:网吧整个局域网上的所有的计算机都不能上因特网。
分析、排除:服务器系统工作是否正常;服务器是否掉线了;调制解调器工作是否正常;局端工作是否正常。
7.故障现象:网吧局域网中除了服务器能上网其他客户机都不能上网。
分析、排除:检查HUB或交换机工作是否正常;检查服务器与HUB或交换机连接的网络部分(含:网卡、网线、接头、网络配置)工作是否正常;检查服务器上代理上网的软件是否正常启动运行;设置是否正常。
8.故障现象:进行拨号上网操作时,MODEN没有拨号声音,始终连接不上因特网,MODEN上指示灯也不闪。>
分析、排除:电话线路是否占线;接MODEN的服务器的连接(含:连线、接头)是否正常;电话线路是否正常,有无杂音干扰;拨号网络配置是否正确;MODEN的配置设置是否正确,检查拨号音的音频或脉冲方式是否正常。
9.故障现象:系统检测不到MODEN(若MODEN是正常的)。
分析、排除:重新安装一遍MODEN,注意通讯端口的正确位置。
10.故障现象:连接因特网速度过慢。
分析、排除:检查服务器系统设置在“拨号网络”中的端口连接速度是否是设置的最大值;线路是否正常;可通过优化MODEN的设置来提高连接的速度;通过修改注册表也可以提高上网速度;同时上网的客户机是否很多;若是很多,而使连接速度过慢是正常现象。
11.故障现象:计算机屏幕上出现“错误678”或“错误650”的提示框。
分析、排除:一般是你所拨叫的服务器线路较忙、占线,暂时无法接通,你可进一会后继续重拨。
12.故障现象:计算机屏幕上出现“错误680:没有拨号音。请检测调制解调器是否正确连到电话线。”或者“Thereisno dialtone。 Makesure yourModem is connected to the phone line properly。”的提示框。
分析、排除:检测调制解调器工作是否正常,是否开启;检查电话线路是否正常,是否正确接入调制解调器,接头有无松动。
13.故障现象:计算机屏幕上出现“The Modem is being used by another Dial-up Networding connection or another program。Disconnect the other connection or close the program,and then try again” 的提示框。
分析、排除:检查是否有另一个程序在使用调制解调器;检查调制解调器与端口是否有冲突。
14.故障现象:计算机屏幕上出现“The computer you are dialing into is not answering。Try again later”的提示框。
分析、排除:电话系统故障或线路忙,过一会儿再拨。
15.故障现象:计算机屏幕上出现“Connection to xx.xx.xx. was terminated. Do you want to reconnect?” 的提示框。
分析、排除:电话线路中断使拨号连接软件与ISP主机的连接被中断,过一会重试。
16.故障现象:计算机屏幕上出现“The computer is not receiving a response from the Modem. Check that the Modem is plugged in,and if necessary,turn the Modem off ,and then turn it back on” 的提示框。
分析、排除:检查调制解调器的电源是否打开;检查与调制解调器连接的线缆是否正确的连接。
17.故障现象:计算机屏幕上出现“Modem is not responding” 的提示框。
分析、排除:表示调制解调器没有应答;检查调制解调器的电源是否打开;检查与调制解调器连接的线缆是否正确连接;调制解调器是损坏。
18.故障现象:计算机屏幕上出现“NO CARRIER” 的提示信息。
分析、排除:表示无载波信号。这多为非正常关闭调制解调器应用程序或电话线路故障;检查与调制解调器连接的线缆是否正确的连接;检查调制解调器的电源是否打开。
19.故障现象:计算机屏幕上出现“No dialtone” 的提示框。
分析、排除:表示无拨号声音;检查电话线与调制解调器是否正确连接。
20.故障现象:计算机屏幕上出现“Disconnected” 的提示时。
分析、排除:表示终止连接;若该提示是在拨号时出现,检查调制解调器的电源是否打开;若该提示是使用过程中出现,检查电话是否在被人使用。
21.故障现象:计算机屏幕上出现“ERROR” 的提示框。
分析、排除:是出错信息;调制解调器工作是否正常,电源是否打开;正在执行的命令是否正确。
22.故障现象:计算机屏幕上出现“A network error occurred unable to connect to server (TCP Error:No router to host)The server may be down or unreadchable。Try connectin gagain later” 的提示时。
分析、排除故障:表示是网络错误,可能是TCP协议错误;没有路由到主机,或者是该服务器关机而导致不能连接,这时只有重试了。
23.故障现象:计算机屏幕上出现“The line id busy, Try again later”或“BUSY” 的提示时。
分析、排除:表示占线,这时只在重试了。
24.故障现象:计算机屏幕上出现:“The option timed out”的提示时。
分析、排除:表示连接超时,多为通讯网络故障,或被叫方忙,或输入网址错误。向局端查询通讯网络工作情况是否正常。检查输入网址是否正确。
25.故障现象:计算机屏幕上出现“Another program is dialing the selected connection” 的提示时。
分析、排除:表示有另一个应用程序已经在使用拨号网络连接了。只有停止该连接后才能继续我们的拨号连接。
26.故障现象: 在用IE浏览器浏览中文站点时出现乱码。
分析、排除故障:IE浏览器中西文软件不兼容造成的汉字会显示为乱码,可试用NetScape的浏览器看看;我国使用的汉字内码是GB,而台湾使用的是BIG5,若是这个原因造成的汉字显示为乱码,可用RichWin 变换内码试试。
27.故障现象: 浏览网页的速度较正常情况慢。
分析、排除:主干线路较拥挤,造成网速较慢;(属正常情况)浏览某一网页的人较多,造成网速较慢;(属正常情况) 有关Modem的设置有问题;局端线路有问题。
28.故障现象: 能正常上网,但总是时断时续的。
分析、排除:电话线路问题,线路质量差;调制解调器的工作不正常,影响上网的稳定性。
29.故障现象: 用拨号上网时,听不见拨号音,无法进行拨号。
分析、排除:检查调制解调器工作是否正常,电源打开否,电缆线接好了没,电话线路是否正常。(大众网络报)
30.故障现象: 在拨号上网的过程中,能听见拨号音,但没有拨号的动作,而计算机却提示“无拨号声音”。
分析、排除:可通过修改配置,使拨号器不去检测拨号声音。可进入“我的连接”的属性窗口,单击“配置”标签,在“连接”一栏中去掉“拨号前等待拨号音”的复选框。
31.故障现象: 在拨号上网的过程中,计算机屏幕上出现:“已经与您的计算机断开,双击‘连接’重试。”的提示时。
分析、排除: 电话线路质量差,噪声大造成的,可拨打:112报修。也可能是病毒造成的,用杀毒软件杀一遍毒。
32.故障现象: 若计算机屏幕上出现:“拨号网络无法处理在‘服务器类型’设置中指定的兼容网络协议”的提示时。
分析、排除:检查网络设置是否正确;调制解调器是否正常;是否感染上了宏病毒,用最新的杀毒软件杀一遍毒。
33.故障现象:Windows 98网上邻居中找不到域及服务器,但可找到其他的工作站。
分析、排除:在“控制面板→网络→Microsoft网络客户”中,将登录时Windows 98与网络的连接由慢速改为快速连接。
34.故障现象:在查看"网上邻居"时,会出现“无法浏览网络。网络不可访问。想得到更多信息,请查看‘帮助索引‘中的‘网络疑难解答’专题。”的错误提示。
分析、排除:第一种情况是因为在Windows启动后,要求输入Microsoft网络用户登录口令时,点了"取消"按钮所造成的,如果是要登录NT服务器,必须以合法的用户登录,并且输入正确口令。第二种情况是与其它的硬件产生冲突。打开“控制面板→系统→设备管理”。查看硬件的前面是否有黄色的问号、感叹号或者红色的问号。如果有,必须手工更改这些设备的中断和I/O地址设置。
35.故障现象:在“网上邻居”或“资源管理器”中只能找到本机的机器名。
分析、排除:网络通信错误,一般是网线断路或者与网卡的接确不良,还有可能是Hub有问题。
36.故障现象:可以访问服务器,也可以访问Internet,但却无法访问其他工作站?
分析、排除:如果使用了WINS解析,可能是WINS服务器地址设置不当;检查网关设置,若双方分属不同的子网而网关设置有误,则不能看到其他工作站;检查子网掩码设置。
37.故障现像:网卡在计算机系统无法安装。
分析、排除:第一个可能是计算机上安装了过多其它类型的接口卡,造成中断和I/O地址冲突。可以先将其他不重要的卡拿下来,再安装网卡,最后再安装其他接口卡。第二个可能是计算机中有一些安装不正确的设备,或有"未知设备"一项,使系统不能检测网卡。这时应该删除"未知设备quot;中的所有项目,然后重新启动计算机。第三个可能是计算机不能识别这一种类型的网卡,一般只能更换网卡。
38.故障现象:局域网上可以Ping通IP地址,但Ping不通域名?
分析、排除:TCP/IP协议中的“DNS设置”不正确,请检查其中的配置。对于对等网,“主机”应该填自己机器本身的名字,“域”不需填写,DNS服务器应该填自己的IP。对于服务器/工作站网,“主机”应该填服务器的名字,“域”填局域网服务器设置的域,DNS服务器应该填服务器的IP。
39.故障现象:网络上的其他计算机无法与某一台计算机连接。
分析、排除:确认是否安装了该网络使用的网络协议?如果要登录NT域,还必须安装NetBEUI协议。确认是否安装并启用了文件和打印共享服务?如果是要登录NT服务器网络,在“网络”属性的“主网络登录”中,应该选择“Microsoft网络用户”。如果是要登录NT服务器网络,在“网络”属性框的“配置”选项卡中,双击列表中的“Microsoft网络用户”组件,检查是否已选中“登录到Windows域”复选框,以及“Windows域”下的域名是否正确。
网络故障70例(2)!!
40.故障现象:安装网卡后,计算机启动的速度慢了很多。
分析、排除:可能在TCP/IP设置中设置了"自动获取IP地址",这样每次启动计算机时,计算机都会主动搜索当前网络中的DHCP服务器,所以计算机启动的速度会大大降低。解决的方法是指定静态的IP地址。(大众网络报)
50.故障现象:网络安装后,在其中一台计算机上的“网络邻居”中看不到任何计算机?
分析、排除:主要原因可能是网卡的驱动程序工作不正常。请检查网卡的驱动程序,必要时重新安装驱动程序。
51.故障现象:从“网络邻居”中能够看到别人的机器,但不能读取别人电脑上的数据?
分析、排除:
(1)首先必须设置好资源共享。选择"网络→配置→文件及打印共享",将两个选项全部打勾并确定,安装成功后在"配置"中会出现"Microsoft 网络上的文件与打印机共享"选项。
(2)检查所安装的所有协议中,是否绑定了"Microsoft网络上的文件与打印机共享"。选择"配置"中的协议如"TCP/IP协议",点击"属性"按钮,确保绑定中"Microsoft网络上的文件与打印机共享"、"Microsoft网络用户"前已经打勾了。
52.故障现象:在安装网卡后通过"控制面板→系统→设备管理器"查看时,报告"可能没有该设备,也可能此设备未正常运行,或是没有安装此设备的所有驱动程序"的错误信息。
分析、排除:
(1)没有安装正确的驱动程序,或者驱动程序版本不对。
(2)中断号与I/O地址没有设置好。有一些网卡通过跳线开关设置;另外一些是通过随卡带的软盘中的Setup程序进行设置。
53.故障现象:已经安装了网卡和各种网络通讯协议,但网络属性中的选择框"文件及打印共享"为灰色,无法选择。
分析、排除:原因是没有安装"Microsoft 网络上的文件与打印共享"组件。在"网络"属性窗口的"配置"标签里,单击"添加"按钮,在"请选择网络组件"窗口单击"服务",单击"添加"按钮,在"选择网络服务"的左边窗口选择"Microsoft",在右边窗口选择"Microsoft网络上的文件与打印机共享",单击"确定"按钮,系统可能会要求插入Windows安装光盘,重新启动系统即可。
54.故障现象:无法在网络上共享文件和打印机。
分析、排除:
(1)确认是否安装了文件和打印机共享服务组件。要共享本机上的文件或打印机,必须安装"Microsoft网络上的文件与打印机共享"服务。
(2)确认是否已经启用了文件或打印机共享服务。在"网络"属性框中选择"配置"选项卡,单击"文件与打印机共享"按钮,然后选择"允许其他用户访问的我的文件"和"允许其他计算机使用我的打印机"选项。
(3)确认访问服务是共享级访问服务。在"网络"属性的"访问控制"里面应该选择"共享级访问"。
55.故障现象:客户机无法登录到网络上。
分析、排除:
(1)检查计算机上是否安装了网络适配器,该网络适配器工作是否正常。
(2)确保网络通信正常,即网线等连接设备完好。
(3)确认网络适配器的中断和I/O地址没有与其他硬件冲突。
(4)网络设置可能有问题。
56.故障现象:无法将台式电脑与笔记本电脑使用直接电缆连接。
分析、排除:笔记本电脑自身可能带有PCMCIA网卡,在"我的电脑→控制面板→系统→设备管理器"中删除该"网络适配器"记录后,重新连接即可。
57.故障现象:在网上邻居上可以看到其它机器,别人却看不到自己?
分析、排除:经检查网络配置,发现是漏装"Microsoft 网络上的文件与打印机共享"所致。解决办法:开始--设置--控制面板--网络,单击"添加",在网络组件中选择"服务",单击"添加"按钮,型号中选择"Microsoft 网络上的文件与打印机共享"即可。重新启动后问题解决。
58.故障现象:在网上邻居上只能看到计算机名,却没有任何内容?
分析、排除:出现这种问题时一般都以为是将文件夹没有共享所致。打开资源管理器,点取要共享的文件夹,却发现右键菜单中的"共享"项都消失了。解决办法是右击“网上邻居”图标,点取“文件及打印共享”,钩选“允许其它用户访问我的文件”,重启后,问题解决。
59.故障现象:在Windows 98的“网上邻居”中找不到域及服务器,但可找到其他的工作站?
分析、排除:在“控制面板→网络→Microsoft网络客户”中,将登录时Windows 98与网络的连接由慢速改为快速连接。
60.故障现象:在查看“网上邻居”时,会出现“无法浏览网络。网络不可访问。想得到更多信息,请查看'帮助索引'中的'网络疑难解答'专题。”的错误提示。
分析、排除:(1)这是在Windows启动后,要求输入Microsoft网络用户登录口令时,点了“取消”按钮所造成的,如果是要登录Windows NT或者Windows 2000服务器,必须以合法的用户登录,并且输入正确口令。
(2)与其它的硬件起冲突。打开“控制面板→系统→设备管理”。查看硬件的前面是否有黄色的问号、感叹号或者红色的问号。如果有,必须手工更改这些设备的中断和I/O地址设置。
61.故障现象:用Windows 2000专业版做服务器,然后用Windows 98做客户机,网上邻居正常,Windows 98与Windows 98之间突然变得很慢,但从Windows 2000访问Windows 98却很快。
分析、排除:大家在通过网络系统浏览共享文件时,大概都会要等上30秒钟。这其实是因为Windows 2000有个BUG,一定要先在“计划任务”里搜索,再找出共享文件。而我们提到的这个方法就是专门修补这个BUG的,如果做一些改动的话,Windows 2000的用户就会发现,无论是互联网还是视窗浏览的速度都有了很显著的提高:
打开注册表
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/Current Version/Explorer/RemoteComputer/NameSpace
在其分栏出选择键值:
{D6277990-4C6A-11CF-8D87-00AA0060F5BF
然后删除。
因为就是这个健值引导Windows去搜索“计划任务”。不需要重新开机,几乎立刻就可以感受到你的浏览程序快了很多!
62.故障现象:已经按照要求安装、设置好Sygate,但服务器仍不能连接网络。
分析、排除:使用Sygate中特有的Sygate Diagnostics(诊断)功能。可以通过以下两种方式来启动诊断医生,在 Sygate王界面的工具栏电权击 Diagnosticstool(诊断工具)图标,或者点去开始一程序一Sygate——Sygate Diagnostics。这时诊断工具会依次测试系统设置、网络适配器、拨号连接、TCP/IP协议与设置等。如果测试不能通过,系统会出现一个提示,描述问题及指点正确的方向。此时你可以根据提示作相应的更改。如果测试通过,诊断工具会显示已经测试通过的提示。
63.故障现象:正确安装Sygate4后,网络中的某些客户机不能正常使用。
分析、排除:一般情况,客户机不能正常使用多为TCP/IP的配置出现问题,当然也不排除操作系统和硬件(比如网卡已坏等)的问题,这种情况下,你可以使用Sygate的Troubleshooting(发现并解决故障)功能,在出现的表单中详细列出使用Sygate后产生的信息资料,例如:sdsys.log、 Sygate.log、 sgconf.log、 sgsys.log等,在这些日志中包含了服务器、操作系统、拨号网络、网卡、浏览网址、应用程序等详细资料,你可以根据这些资料来判断故障,然后作出相应修改。
64.故障现象:自从安装Sygate后,服务器经常会莫名其妙自动拨号上网。
分析、排除:这是因为网络中的客户机启动了某些网络软件,例如浏览器、电子邮件软件等,而又在配置中勾进了Enable Dial-on-Demand For Cline(允许客户机拨号),这样当SyGate侦测到网络中有连接到Internet的请求,如此时系统尚未建立连接,便会自动拨号。只要去掉前面的小勾,即能解决这个问题。
65. 故障现象:用分机电话线上网,Modem为实达网上之星,上网连接速度最快才48000bps。 还有,将Modem放在主机箱侧,开机后(未打开Modem电源),家里的电话就处于忙音状态。
分析、排除:第一个问题跟分机电话线或线接头质量有很大关系,另外,如果Modem的速度平常都能接近48000bps,也不要太在意,应该重点先看一下它的实际下载速度是否令你满意。第二个问题,肯定和主机电源的电磁辐射强和屏蔽效果差有关,最好用物体在主机和Modem之间进行屏蔽,或将Modem远离主机。
66.故障现象:一台计算机通过局域网连接,一切正常。但是换了一个硬盘、重新安装Win98操作系统后,查看网上邻居时,只能看到自己的计算机和所属的工作组;而访问外部网却没有问题,收发邮件也没问题。
分析、排除:启动电脑后不要立即打开网上邻居,而是等一下再打开,并且按F5键刷新,一般可以看到新的工作组和用户。如果实在不行,就用查找计算机,找到其他组的计算机后作成快捷方式放在桌面上。
67.故障现象:有时ADSL的访问速度较平时慢。
分析、排除:原因很多:可能是出口带宽及对方站点配置情况等原因的影响;可能是线路的质量情况的影响;可能是接入局端设备影响。
68.故障现象: 在Windows NT4.0操作系统上已经安装了Modem、TCP/IP协议和RAS服务,但在拔号上网铁过程中,计算机屏幕上出:“734错误,对方服务器终止(口令和用户名均无误,在Windows下可以正常上网)”的提示框。
分析、排除:在“设置”中不要输入域名试试看。
69.故障现象:在Windows NT4.0操作系统上拨号上网的过程中,在检测用户名和密码时要断线。
分析、排除:可以将验证密码的选项改成明文验证方式试试看;可以把拨号网络属性中“拨号后出现终端窗口”复选框选中试试看。
70.故障现象: 在Windows NT4.0操作系统上拨号上网的过程中,在检测用户名和密码后自动断开。
分析、排除:可在“新的电话簿项”中,单击“安全”项,然后在“认证与加密规则”中选中“接受任何验证”。
71.故障现象: 只要一启动IE浏览器,就会自动执行发送和接收邮件。
分析、排除:可打开IE浏览器,在菜单栏中单击“工具(T)”项,在弹出的下拉式菜单中选中并单击“Internet选项(O)”项,在弹出的对话框中单击“常规”标签,去掉“启动时自动接收所有帐号怕邮件”项便可以
- 作者: freeopinion 2006年10月21日, 星期六 16:45 回复(0) | 引用(0) 加入博采
SQL语句实现查询记录分页
SELECT * FROM t_table t1 WHERE (SELECT count(*) FROM t_table t2 WHERE t2.id < t1.id ) > = 10 AND (SELECT count(*) FROM t_table t2 WHERE t2.id < t1.id ) < 20
SELECT * FROM t_table t1 WHERE (SELECT count(*) FROM t_table t2 WHERE t2.id < t1.id AND t2.key = '123') > = 10 AND (SELECT count(*) FROM t_table t2 WHERE t2.id < t1.id AND t2.key = '123') < 20 AND t1.key = '123'
当然条件中的id可以换为任何能表识记录顺序的字段
- 作者: freeopinion 2006年10月21日, 星期六 16:37 回复(0) | 引用(0) 加入博采
20种VC++编译错误信息
1、fatal error C1010: unexpected end of file while looking for precompiled header directive。
寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include "stdafx.h")
2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory
不能打开包含文件“R…….h”:没有这样的文件或目录。
3、error C2011: 'C……': 'class' type redefinition
类“C……”重定义。
4、error C2018: unknown character '0xa3'
不认识的字符'0xa3'。(一般是汉字或中文标点符号)
5、error C2057: expected constant expression
希望是常量表达式。(一般出现在switch语句的case分支中)
6、error C2065: 'IDD_MYDIALOG' : undeclared identifier
“IDD_MYDIALOG”:未声明过的标识符。
7、error C2082: redefinition of formal parameter 'bReset'
函数参数“bReset”在函数体中重定义。
8、error C2143: syntax error: missing ':' before '{'
句法错误:“{”前缺少“;”。
9、error C2146: syntax error : missing ';' before identifier 'dc'
句法错误:在“dc”前丢了“;”。
10、error C2196: case value '69' already used
值69已经用过。(一般出现在switch语句的case分支中)
11、error C2509: 'OnTimer' : member function not declared in 'CHelloView'
成员函数“OnTimer”没有在“CHelloView”中声明。
12、error C2511: 'reset': overloaded member function 'void (int)' not found in 'B'
重载的函数“void reset(int)”在类“B”中找不到。
13、error C2555: 'B::f1': overriding virtual function differs from 'A::f1' only by return type or calling convention
类B对类A中同名函数f1的重载仅根据返回值或调用约定上的区别。
14、error C2660: 'SetTimer' : function does not take 2 parameters
“SetTimer”函数不传递2个参数。
15、warning C4035: 'f……': no return value
“f……”的return语句没有返回值。
16、warning C4553: '= =' : operator has no effect; did you intend '='?
没有效果的运算符“= =”;是否改为“=”?
17、warning C4700: local variable 'bReset' used without having been initialized
局部变量“bReset”没有初始化就使用。
18、error C4716: 'CMyApp::InitInstance' : must return a value
“CMyApp::InitInstance”函数必须返回一个值。
19、LINK : fatal error LNK1168: cannot open Debug/P1.exe for writing
连接错误:不能打开P1.exe文件,以改写内容。(一般是P1.Exe还在运行,未关闭)
20、error LNK2001: unresolved external symbol "public: virtual _ _thiscall C……::~C……(void)"
连接时发现没有实现的外部符号(变量、函数等)。
- 作者: freeopinion 2006年10月9日, 星期一 15:57 回复(0) | 引用(0) 加入博采
VC++中利用/GS开关防止缓冲区溢出
缓冲区溢出通常表现为一个最为常见的漏洞而存在于今天的各种软件之中,黑客可以用恶意的输入,从而更改程序的执行流程,由此入侵相应的进程、电脑、或整个域。如果进程运行于一个高度受信的账户之下,如管理员或本地系统账户,那么黑客带来的破坏将是极其严重,并有潜在广泛传播的危险。近几年来爆发的一些"知名"病毒,如红色代码、冲击波、震荡波等等,都源于C/C++代码缓冲区溢出的结果。
从程序的角度来看,缓冲区溢出只是一个再简单不过的编程错误--都是关于复制一个内存区域的内容到另一个内存区域,而目标内存区域容量太小无法容纳。以下的代码作了简单的演示: char* source = "A reasonably long string";
char dest[10];
::strcpy(dest, source);
在本例中,源字符串的长度为25个字符(包括了空结束符),它对目标内存块来说,无疑太大了,而目标内存块声明在堆栈上;当此代码执行时,将会破坏掉原有堆栈,程序会因为一个访问违例而崩溃。如果此源内存块由外部第三方提供,那么就有可能存在一个漏洞,因为它允许传入函数的内存块以一种特定的方式修改堆栈。
当在C/C++中调用一个函数时,调用函数的返回地址被存放在堆栈中,因此在被调用函数执行完毕时,执行流程能重新返回到原处。如果调用了一个可能包含潜在缓冲区溢出的函数,返回地址可能会被修改,而且执行流程将会跳到缓冲区数据中指定的地方。通过改变函数的返回地址,攻击者可获取进程中任意位置的代码以执行,一般而言,主要可以两种方式被利用:
·如果带有漏洞的程序是已知、且容易访问到的,攻击者可查找某函数的地址,这通常会在所有进程实例的一处固定地址处被找到;并修改堆栈,等着此函数被调用。
·要执行的指令可作为缓冲区的一部分传递到进程地址空间,攻击者利用此来完成攻击。
防范缓冲区溢出
防范缓冲区溢出最简单的方式是限制复制的数据大小,使其不能大于目标缓冲区容量。虽然此方法看上去微不足道,但实际上,经验证明,要在那些大型的C/C++代码中,完全消除了缓冲区溢出的隐患,是件非常艰巨的任务。另外,使用如 .NET或Java这样的受托管技术,也能极大地降低缓冲区溢出的危险,但把大型项目移植到此技术上,实施起来不太可能也不适当。
基于堆栈的缓冲区溢出可如此简单地被利用的原因在于,编译器生成的指令,会把函数的返回地址存储在堆栈中,但要认识到,编译器在这个问题中,只扮演了一个小小的角色。从Visual C++.NET(7.0)开始,Visual C++开发小组采取了一种方法,可从编译器方面减少此类问题发生的机率,他们在堆栈中保存函数返回地址的数据之下,插入了一个带有已知数值的cookie,由此,如果缓冲区溢出改变了函数的返回地址值,同样也会覆盖这个cookie,而在函数返回时,一般会对这个cookie进行检测,如果检测到cookie已被修改,就会抛出一个安全异常,而如果这个异常未被处理,此进程就会终止。以下的代码演示了一个带有安全异常处理方法的简单程序:void _cdecl sec_handler( int code, void *)
{
if ( code == _SECERR_BUFFER_OVERRUN )
{
printf("检测到一个缓冲区溢出。\n");
exit(1);
}
}
int main()
{
_set_security_error_handler( sec_handler );
//主程序代码在此省略。
}
Visual C++.NET 2003(7.1)通过移动易受攻击的数据结构--(如异常处理方法的地址)--到堆栈中位于缓冲区之下的某个位置,增强了缓冲区溢出的保护力度。在编译器的7.0版本中,可通过破坏缓冲区与cookie之间的敏感数据,绕过安全cookie所提供的保护;然而,在新版本的编译器中,已把这些数据移到位于缓冲区下的一个区域,现在,想要通过修改这些数据而达到溢出,似乎是不太可能了。
图1演示了在C++编译器6、7.0、7.1中,堆栈概念上的布局,并演示了堆栈由高地址向低地址空间方向增长,这也是当程序执行时,堆栈增长的方向。堆栈向下增长,正是导致缓冲区溢出的主要原因,因为溢出会覆写在比缓冲区更高的内存地址空间上,而此正是易受攻击数据结构的栖身之地。 
图1:堆栈逻辑布局
除了把异常处理方法等信息移到堆栈中数据缓冲区之下,Visual C++.NET 2003的链接器也把结构化异常处理方法的地址放到可执行文件的头部中。当异常发生时,操作系统可以检查堆栈中的异常信息地址,是否符合记录在文件头信息中的异常处理方法,如果情况不符,异常处理方法将不会执行。比如说,Windows Server 2003就可检查结构化异常信息,而此项技术也在Service Pack 2中移植到了Windows XP上。
而Visual C++ 2005(8.0)在此基础上又更进了一步,通常当有函数调用发生时,如果其中的一个本地缓冲区超出限度了,攻击者可能改写堆栈中在此之上的任何东西,包括异常处理、安全cookie、帧指针、返回地址和函数参数。而这些值的大多数被不同的机制所保护(如安全异常处理),但对一个有函数指针作参数的函数来说,仍有机会被溢出。如果一个函数接受一个函数指针(或结构、类中包含有函数指针)作为参数,攻击者就有可能改写指针中的值,使代码执行任何他想要的函数。鉴于此,Visual C++ 2005编译器将分析所有可能存在此漏洞的函数参数,并复制一份函数参数--并不使用原有的函数参数,把它放在堆栈中本地变量之下。如果原有函数参数被溢出改写了,只要副本中的值仍保持不变,整个函数就不会被攻破。
应用缓冲区保护
只需简单地打开/GS编译器开关,就可启用缓冲区保护。在Visual Studio中,此开关可在"C/C++"选项页的"代码生成"选项中找到(如图2所示)。默认情况下,在Debug配置下为关,而在Release配置下为开。
图2:设置/GS开关
如果用最新版本的编译器进行编译,并生成结构化异常信息,那么在默认情况下,安全结构化异常处理将是打开的,另外,也可以使用/SAFESEH:NO命令行选项来关闭安全结构化异常处理,在Visual Studio的工程设置中,是没办法关闭安全结构化异常处理的,但仍可在链接器中使用此命令行选项来完成。
/GS及更远的安全前景
仅仅是打开一个编译器开关,不会使一个程序彻底变得安全,但在安全漏洞以各种形式出现的今天,它将有助于使程序更加安全。基于堆栈的缓冲区溢出是安全漏洞中的一大类,但随着黑客攻击技术的不断更新,相信它的谢幕,还有一段很长的路要走。
在Microsoft正式的术语中,/GS和SAGESEH均为软件强制的数据执行保护(DEP),软件强制的DEP也能以硬件的方式实现,如在实现了此功能的CPU中,如果数据出现在被标记为"不可执行"的内存页中,将不会执行它。Windows XP SP2及Windows Server 2003现在已支持这些技术,目前市面上的大多数的32位CPU及全部的64位CPU,都支持No Execute(NX)这类安全增强技术。
任何一个好的安全系统,均有多层防范措施应对安全威胁。本文所涉及的编译器开关,它能防范或减少普通编码错误所带来的安全隐患,而且它具有易于使用和低成本的特点,在这场没有硝烟的战争中,不失为一个好的解决方案,绝对值得你的程序采用。
- 作者: freeopinion 2006年10月9日, 星期一 15:56 回复(0) | 引用(0) 加入博采
C/C++ 程序员应聘常见试题
1.引言
本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见。
许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分。读者可从本文看到strcpy函数从2分到10分解答的例子,看看自己属于什么样的层次。此外,还有一些面试题考查面试者敏捷的思维能力。
分析这些面试题,本身包含很强的趣味性;而作为一名研发人员,通过对这些面试题的深入剖析则可进一步增强自身的内功。
2.找错题
试题1:void test1()
{
char string[10];
char* str1 = "0123456789";
strcpy( string, str1 );
}
试题2:void test2()
{
char string[10], str1[10];
int i;
for(i=0; i<10; i++)
{
str1[i] = 'a';
}
strcpy( string, str1 );
}
试题3:void test3(char* str1)
{
char string[10];
if( strlen( str1 ) <= 10 )
{
strcpy( string, str1 );
}
}
解答:
试题1字符串str1需要11个字节才能存放下(包括末尾的’\0’),而string只有10个字节的空间,strcpy会导致数组越界;
对试题2,如果面试者指出字符数组str1不能在数组内结束可以给3分;如果面试者指出strcpy(string, str1)调用使得从str1内存起复制到string内存起所复制的字节数具有不确定性可以给7分,在此基础上指出库函数strcpy工作方式的给10分;
对试题3,if(strlen(str1) <= 10)应改为if(strlen(str1) < 10),因为strlen的结果未统计’\0’所占用的1个字节。
剖析:
考查对基本功的掌握:
(1)字符串以’\0’结尾;
(2)对数组越界把握的敏感度;
(3)库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案:
2分void strcpy( char *strDest, char *strSrc )
{
while( (*strDest++ = * strSrc++) != ‘\0’ );
}
4分void strcpy( char *strDest, const char *strSrc )
//将源字符串加const,表明其为输入参数,加2分
{
while( (*strDest++ = * strSrc++) != ‘\0’ );
}
7分void strcpy(char *strDest, const char *strSrc)
{
//对源地址和目的地址加非0断言,加3分
assert( (strDest != NULL) && (strSrc != NULL) );
while( (*strDest++ = * strSrc++) != ‘\0’ );
}
10分//为了实现链式操作,将目的地址返回,加3分!
char * strcpy( char *strDest, const char *strSrc )
{
assert( (strDest != NULL) && (strSrc != NULL) );
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘\0’ );
return address;
}
从2分到10分的几个答案我们可以清楚的看到,小小的strcpy竟然暗藏着这么多玄机,真不是盖的!需要多么扎实的基本功才能写一个完美的strcpy啊!
(4)对strlen的掌握,它没有包括字符串末尾的'\0'。
读者看了不同分值的strcpy版本,应该也可以写出一个10分的strlen函数了,完美的版本为: int strlen( const char *str ) //输入参数const{
assert( strt != NULL ); //断言字符串地址非0
int len;
while( (*str++) != '\0' )
{
len++;
}
return len;
}
试题4:void GetMemory( char *p )
{
p = (char *) malloc( 100 );
}
void Test( void )
{
char *str = NULL;
GetMmory( str );
strcpy( str, "hello world" );
printf( str );
}
试题5:char *GetMemory( void )
{
char p[] = "hello world";
return p;
}
void Test( void )
{
char *str = NULL;
str = GetMemory();
printf( str );
}
试题6:void GetMemory( char **p, int num )
{
*p = (char *) malloc( num );
}
void Test( void )
{
char *str = NULL;
GetMemory( &str, 100 );
strcpy( str, "hello" );
printf( str );
}
试题7:void Test( void )
{
char *str = (char *) malloc( 100 );
strcpy( str, "hello" );
free( str );
... //省略的其它语句
}
解答:
试题4传入中GetMemory( char *p )函数的形参为字符串指针,在函数内部修改形参并不能真正的改变传入形参的值,执行完char *str = NULL;
GetMemory( str );
后的str仍然为NULL;
试题5中char p[] = "hello world";
return p;
的p[]数组为函数内的局部自动变量,在函数返回后,内存已经被释放。这是许多程序员常犯的错误,其根源在于不理解变量的生存期。
试题6的GetMemory避免了试题4的问题,传入GetMemory的参数为字符串指针的指针,但是在GetMemory中执行申请内存及赋值语句*p = (char *) malloc( num );
后未判断内存是否申请成功,应加上:if ( *p == NULL )
{
...//进行申请内存失败处理
}
试题7存在与试题6同样的问题,在执行char *str = (char *) malloc(100);
后未进行内存是否申请成功的判断;另外,在free(str)后未置str为空,导致可能变成一个“野”指针,应加上:str = NULL;
试题6的Test函数中也未对malloc的内存进行释放。
剖析:
试题4~7考查面试者对内存操作的理解程度,基本功扎实的面试者一般都能正确的回答其中50~60的错误。但是要完全解答正确,却也绝非易事。
对内存操作的考查主要集中在:
(1)指针的理解;
(2)变量的生存期及作用范围;
(3)良好的动态内存申请和释放习惯。
再看看下面的一段程序有什么错误:swap( int* p1,int* p2 )
{
int *p;
*p = *p1;
*p1 = *p2;
*p2 = *p;
}
在swap函数中,p是一个“野”指针,有可能指向系统区,导致程序运行的崩溃。在VC++中DEBUG运行时提示错误“Access Violation”。该程序应该改为:swap( int* p1,int* p2 )
{
int p;
p = *p1;
*p1 = *p2;
*p2 = p;
}
3.内功题
试题1:分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var)
解答:
BOOL型变量:if(!var)
int型变量: if(var==0)
float型变量:
const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON)
指针变量: if(var==NULL)
剖析:
考查对0值判断的“内功”,BOOL型变量的0判断完全可以写成if(var==0),而int型变量也可以写成if(!var),指针变量的判断也可以写成if(!var),上述写法虽然程序都能正确运行,但是未能清晰地表达程序的意思。
一般的,如果想让if判断一个变量的“真”、“假”,应直接使用if(var)、if(!var),表明其为“逻辑”判断;如果用if判断一个数值型变量(short、int、long等),应该用if(var==0),表明是与0进行“数值”上的比较;而判断指针则适宜用if(var==NULL),这是一种很好的编程习惯。
浮点型变量并不精确,所以不可将float变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。如果写成if (x == 0.0),则判为错,得0分。
试题2:以下为Windows NT下的32位C++程序,请计算sizeof的值void Func ( char str[100] )
{
sizeof( str ) = ?
}
void *p = malloc( 100 );
sizeof ( p ) = ?
解答:sizeof( str ) = 4
sizeof ( p ) = 4
剖析:
Func ( char str[100] )函数中数组名作为函数形参时,在函数体内,数组名失去了本身的内涵,仅仅只是一个指针;在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。
数组名的本质如下:
(1)数组名指代一种数据结构,这种数据结构就是数组;
例如:char str[10];
cout << sizeof(str) << endl;
输出结果为10,str指代数据结构char[10]。
(2)数组名可以转换为指向其指代实体的指针,而且是一个指针常量,不能作自增、自减等操作,不能被修改;char str[10];
str++; //编译出错,提示str不是左值
(3)数组名作为函数形参时,沦为普通指针。
Windows NT 32位平台下,指针的长度(占用内存的大小)为4字节,故sizeof( str ) 、sizeof ( p ) 都为4。
试题3:写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。另外,当你写下面的代码时会发生什么事?least = MIN(*p++, b);
解答:#define MIN(A,B) ((A) <= (B) ? (A) : (B))
MIN(*p++, b)会产生宏的副作用
剖析:
这个面试题主要考查面试者对宏定义的使用,宏定义可以实现类似于函数的功能,但是它终归不是函数,而宏定义中括弧中的“参数”也不是真的参数,在宏展开的时候对“参数”进行的是一对一的替换。
程序员对宏定义的使用要非常小心,特别要注意两个问题:
(1)谨慎地将宏定义中的“参数”和整个宏用用括弧括起来。所以,严格地讲,下述解答:#define MIN(A,B) (A) <= (B) ? (A) : (B)
#define MIN(A,B) (A <= B ? A : B )
都应判0分;
(2)防止宏的副作用。
宏定义#define MIN(A,B) ((A) <= (B) ? (A) : (B))对MIN(*p++, b)的作用结果是:
((*p++) <= (b) ? (*p++) : (*p++))
这个表达式会产生副作用,指针p会作三次++自增操作。
除此之外,另一个应该判0分的解答是:#define MIN(A,B) ((A) <= (B) ? (A) : (B));
这个解答在宏定义的后面加“;”,显示编写者对宏的概念模糊不清,只能被无情地判0分并被面试官淘汰。
试题4:为什么标准头文件都有类似以下的结构? #ifndef __INCvxWorksh
#define __INCvxWorksh
#ifdef __cplusplus
extern "C" {
#endif
/*...*/
#ifdef __cplusplus
}
#endif
#endif /* __INCvxWorksh */
解答:
头文件中的编译宏#ifndef __INCvxWorksh
#define __INCvxWorksh
#endif
的作用是防止被重复引用。
作为一种面向对象的语言,C++支持函数重载,而过程式语言C则不支持。函数被C++编译后在symbol库中的名字与C语言的不同。例如,假设某个函数的原型为: void foo(int x, int y);
该函数被C编译器编译后在symbol库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。_foo_int_int这样的名字包含了函数名和函数参数数量及类型信息,C++就是考这种机制来实现函数重载的。
为了实现C和C++的混合编程,C++提供了C连接交换指定符号extern "C"来解决名字匹配问题,函数声明前加上extern "C"后,则编译器就会按照C语言的方式将该函数编译为_foo,这样C语言中就可以调用C++的函数了。
试题5:编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh”
函数头是这样的://pStr是指向以'\0'结尾的字符串指针
//steps是要求移动的n
void LoopMove ( char * pStr, int steps )
{
//请填充...
}
解答:
正确解答1:void LoopMove ( char *pStr, int steps )
{
int n = strlen( pStr ) - steps;
char tmp[MAX_LEN];
strcpy ( tmp, pStr + n );
strcpy ( tmp + steps, pStr);
*( tmp + strlen ( pStr ) ) = '\0';
strcpy( pStr, tmp );
}
正确解答2:void LoopMove ( char *pStr, int steps )
{
int n = strlen( pStr ) - steps;
char tmp[MAX_LEN];
memcpy( tmp, pStr + n, steps );
memcpy(pStr + steps, pStr, n );
memcpy(pStr, tmp, steps );
}
剖析:
这个试题主要考查面试者对标准库函数的熟练程度,在需要的时候引用库函数可以很大程度上简化程序编写的工作量。
最频繁被使用的库函数包括:
(1) strcpy
(2) memcpy
(3) memset
试题6:已知WAV文件格式如下表,打开一个WAV文件,以适当的数据结构组织WAV文件头并解析WAV格式的各项信息。
WAVE文件格式说明表偏移地址 字节数 数据类型 内 容 文件头 00H 4 Char "RIFF"标志 04H 4 int32 文件长度 08H 4 Char "WAVE"标志 0CH 4 Char "fmt"标志 10H 4 过渡字节(不定) 14H 2 int16 格式类别 16H 2 int16 通道数 18H 2 int16 采样率(每秒样本数),表示每个通道的播放速度 1CH 4 int32 波形音频数据传送速率 20H 2 int16 数据块的调整数(按字节算的) 22H 2 每样本的数据位数 24H 4 Char 数据标记符"data" 28H 4 int32 语音数据的长度
解答:
将WAV文件格式定义为结构体WAVEFORMAT: typedef struct tagWaveFormat
{
char cRiffFlag[4];
UIN32 nFileLen;
char cWaveFlag[4];
char cFmtFlag[4];
char cTransition[4];
UIN16 nFormatTag ;
UIN16 nChannels;
UIN16 nSamplesPerSec;
UIN32 nAvgBytesperSec;
UIN16 nBlockAlign;
UIN16 nBitNumPerSample;
char cDataFlag[4];
UIN16 nAudioLength;
} WAVEFORMAT;
假设WAV文件内容读出后存放在指针buffer开始的内存单元内,则分析文件格式的代码很简单,为:WAVEFORMAT waveFormat;
memcpy( &waveFormat, buffer,sizeof( WAVEFORMAT ) );
直接通过访问waveFormat的成员,就可以获得特定WAV文件的各项格式信息。
剖析:
试题6考查面试者组织数据结构的能力,有经验的程序设计者将属于一个整体的数据成员组织为一个结构体,利用指针类型转换,可以将memcpy、memset等函数直接用于结构体地址,进行结构体的整体操作。 透过这个题可以看出面试者的程序设计经验是否丰富。
试题7:编写类String的构造函数、析构函数和赋值函数,已知类String的原型为:class String
{
public:
String(const char *str = NULL); // 普通构造函数
String(const String &other); // 拷贝构造函数
~ String(void); // 析构函数
String & operate =(const String &other); // 赋值函数
private:
char *m_data; // 用于保存字符串
};
解答://普通构造函数
String::String(const char *str)
{
if(str==NULL)
{
m_data = new char[1]; // 得分点:对空字符串自动申请存放结束标志'\0'的空
//加分点:对m_data加NULL 判断
*m_data = '\0';
}
else
{
int length = strlen(str);
m_data = new char[length+1]; // 若能加 NULL 判断则更好
strcpy(m_data, str);
}
}
// String的析构函数
String::~String(void)
{
delete [] m_data; // 或delete m_data;
}
//拷贝构造函数
String::String(const String &other) // 得分点:输入参数为const型
{
int length = strlen(other.m_data);
m_data = new char[length+1]; //加分点:对m_data加NULL 判断
strcpy(m_data, other.m_data);
}
//赋值函数
String & String::operate =(const String &other) // 得分点:输入参数为const型
{
if(this == &other) //得分点:检查自赋值
return *this;
delete [] m_data; //得分点:释放原有的内存资源
int length = strlen( other.m_data );
m_data = new char[length+1]; //加分点:对m_data加NULL 判断
strcpy( m_data, other.m_data );
return *this; //得分点:返回本对象的引用
}
剖析:
能够准确无误地编写出String类的构造函数、拷贝构造函数、赋值函数和析构函数的面试者至少已经具备了C++基本功的60%以上!
在这个类中包括了指针类成员变量m_data,当类中包括指针类成员变量时,一定要重载其拷贝构造函数、赋值函数和析构函数,这既是对C++程序员的基本要求,也是《Effective C++》中特别强调的条款。
仔细学习这个类,特别注意加注释的得分点和加分点的意义,这样就具备了60%以上的C++基本功!
试题8:请说出static和const关键字尽可能多的作用
解答:
static关键字至少有下列n个作用:
(1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
(2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
(3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;
(4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。
const关键字至少有下列n个作用:
(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;
(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;
(3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;
(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;
(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。例如:const classA operator*(const classA& a1,const classA& a2);
operator*的返回结果必须是一个const对象。如果不是,这样的变态代码也不会编译出错:classA a, b, c;
(a * b) = c; // 对a*b的结果赋值
操作(a * b) = c显然不符合编程者的初衷,也没有任何意义。
剖析:
惊讶吗?小小的static和const居然有这么多功能,我们能回答几个?如果只能回答1~2个,那还真得闭关再好好修炼修炼。
这个题可以考查面试者对程序设计知识的掌握程度是初级、中级还是比较深入,没有一定的知识广度和深度,不可能对这个问题给出全面的解答。大多数人只能回答出static和const关键字的部分功能。
4.技巧题
试题1:请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
解答:int checkCPU()
{
{
union w
{
int a;
char b;
} c;
c.a = 1;
return (c.b == 1);
}
}
剖析
嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Little-endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big-endian模式对操作数的存放方式是从高字节到低字节。例如,16bit宽的数0x1234在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:内存地址 存放内容 0x4000 0x34 0x4001 0x12
而在Big-endian模式CPU内存中的存放方式则为:内存地址 存放内容 0x4000 0x12 0x4001 0x34
32bit宽的数0x12345678在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:内存地址 存放内容 0x4000 0x78 0x4001 0x56 0x4002 0x34 0x4003 0x12
而在Big-endian模式CPU内存中的存放方式则为:内存地址 存放内容 0x4000 0x12 0x4001 0x34 0x4002 0x56 0x4003 0x78
联合体union的存放顺序是所有成员都从低地址开始存放,面试者的解答利用该特性,轻松地获得了CPU对内存采用Little-endian还是Big-endian模式读写。如果谁能当场给出这个解答,那简直就是一个天才的程序员。
试题2:写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
解答:int Sum( int n )
{
return ( (long)1 + n) * n / 2; //或return (1l + n) * n / 2;
}
剖析:
对于这个题,只能说,也许最简单的答案就是最好的答案。下面的解答,或者基于下面的解答思路去优化,不管怎么“折腾”,其效率也不可能与直接return ( 1 l + n ) * n / 2相比! int Sum( int n )
{
long sum = 0;
for( int i=1; i<=n; i++ )
{
sum += i;
}
return sum;
}
所以程序员们需要敏感地将数学等知识用在程序设计中
- 作者: freeopinion 2006年10月9日, 星期一 15:54 回复(0) | 引用(0) 加入博采