来源:蜘蛛抓取(WebSpider)
时间:2018-04-19 13:05
标签:
yum erase remove
16:32 提问
关于vector的insert 、 erase、resize操作导致迭代器无效化
typedef vectorint_
int_vec v(2,0);
int_vec::iterator iter_b = v.begin();
v.insert(v.begin(),1);
cout&&*iter_b&&
//这种操作会导致iter_b无效,输出随机值
int_vec v1(2,0);
int_vec::iterator iter_b = v.begin();
v.erase(v.begin());
cout&&*iter_b&&
//却能正常输出当前vector内的第一个元素,求解释
如果insert和erase依次进行操作,事先初始化的迭代器也不会被无效化,求解释
按赞数排序
vector容器是先用allocator分配定量的内存,当vector插入某个数量的元素后超出了vector的容量,此时会重新用allocator申请更大容量的内存,将原来的元素拷贝到新的内存空间中,原来的内存空间就会被释放,那么原先定义的迭代器就失效了; 希望这点解释能帮助到你。
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐博客分类:
Erase flash,Erase NVRAM命令与
日
Erase flash,Erase NVRAM命令与CISCO路由器灾难恢复技术
胡 成
(达县师范高等专科学校网管中心,四川达州635000)
【摘要】简要介绍路由器的正常启动顺序,着重对加栽映像文件密切相关的配置寄存器值进行分析,
得出“erase flash”和“erase nvram”两条命令均可导致路由器灾难性故障,并对灾难恢复技术做了较详细的
阐述。
【关键词】灾难恢复;eraSeflash;erase NVRAM;lOS;ROMMON模式;配置寄存器
【中图分类号1TP332.1 l 【文献标识码】A 【文章编号】(37―04
1 引言
在校园网中,路由器往往用作边界设备,该设备一旦
出现硬故障或系统瘫痪,整个校园网络就成了信息孤岛。
这里要谈的灾难恢复技术是指路由器flash(flash memo~
路由器的一个储存部件)中的lOS(互联网操作系统)不小
心破坏了,而且路由器也没有其它方法从另外的地方加载
lOS时;或者config―register值设置不当,指定位置找不到
lOS加载,路由器便无法进入正常的工作状态,重启后也
只能进入rolrlnlon l&模式,即ROMMON模式,犹如PC机
中没有OS(操作系统)一样,成了裸机,这样的机器是没有
任何价值可言的。erase flash是一条危险的命令,因为这
加载引导程序 定位并加载操作系统
第一步:执行ROM中的引导程序加载器(bootstrap
loader)。引导程序(Bootstrap)是一个简单操作,根据事先
的规定加载一组指令,这些指令又将其他的指令装入内存
或者是使得路由器进入其他的配置模式。
第二步:操作系统(CISCO lOS)可存放在很多地方
(Flash、T兀P Server或者ROM)。具体位置是由配置寄存
条命令足以使你的路由器或交换机成为裸机。但在实际
工作中发现,copy running config/NVRAM(en璩e NVRAM)
等命令同样可使你的路由器只能进入ROMMON模式,不
能正常工作。通过分析研究,笔者认为只要对flash或
NVRAM操作不当都可能导致路由器进入ROMMON模
式。
2 灾难与恢复
以下对flash恶意修改的相关命令用erase flash代替;
对NVRAM恶意修改的有关命令用eE嘲NVRAM代替。
路由器的正常启动顺序:路由器自检之后,接着进行
初始化,步骤如下(见图1)
N、 ^M TFTP Server l 控制台l
I 配置文件
定位并加载配置文件或进入设置模式
图1
器(Configuration register)的启动域(boot field)指定的。如
果启动域指明是从Flash或是网络(T兀P Server)加载
lOS,那么在配置文件中boot system命令就具体指明了映
像(image)的确切位置。 ??
第三步:加载操作系统映像,映像加载并运行后,操作
系统就开始查找硬件和软件部件并通过控制台终端(con-
【收稿日期】2oo5__o5―16
【作者简介】胡成(1975一),男,四川达县人,达县师范高等专科学校网管中心助理工程师,研究方向:计算机网络管
理与维护。
37
2005年第5期 胡成:Erase flash,Erase NVRAM命令与CISCO路由器灾难恢复技术
sole termina1)显示出查找的结果。
第四步:将储存在NVRAM中的配置文件加载入主内
存中,并以每次执行一行的方式运行。这些配置命令将启
动路由进程为每个接口分配地址、设置介质特性等等。
第五步:如果在NVRAM 中不存在有效的配置文件,
操作系统将执行一个以问题为驱动(question―driven)的
初始化配置过程,称为系统配置对话(system configuration
dialog),也叫设置(setup)模式。设置模式只能进行最基
本的配置。后使用各种配置模式下的命令完成大多数的
路由配置任务。
上述过程系路由器的正常启动顺序,当用了erase
flash或erase NVRAM命令之后,路由器便无法进入正常
的工作状态,重启后也只能进入ROMMON(ROMMON模
式是ROM MONITOR的缩写)模式。erase flash命令的功
能是擦除或清空flash memory。由路由器的启动顺序可
知,使用了erase flash命令之后,无法从Flash中加载lOS。
若T兀P Server中无备份IOS或其它原因找不到IOS,这时
系统只能加载ROM中的最小映像,即ROMMON模式。那
e/'aae NVRAM命令是怎么导致路由器进入ROMMON状态
呢?这得分析路由器寄存器与加载IOS的关系。_l J【 J
一般而言,高端路由器包含3个映像(image)文件,在
启动过程中依次载人(例如C7500系列)。它们是bootstrap
image,boot image,IOS image。路由器开机自检后第
??个载入的是bootstrap image,它对处理和I/O(输 输
出)控制器初始化后去查找boot flash中的boot image,加
载boot image可以对接口进行简单的初始化。并不是所
有平台的路由器都有该映像文件的,例如C2600系列的路
由器就没有。Boot image加载之后,它会搜索Flash,查找
可用的IOS并加载它。IOS是一个具有完全功能的映像
文件,它负责路由接口初始化,协同高级特性的执行等其
他工作,是路由器赖以工作的操作系统。最后加载
NVRAM中的配置文件。
前两种映像文件是在ROM中,用户不能更改。对于
IOS,一般情况下,是在flash中,但也可放置在别的地方,
比如T门nP Server。[3]
寄存器值
如何加载映像文件以及从哪里加载与寄存器的值有
关,该值是一个十六位的二进制数(如表一所示),使用十
六进制表示。出厂时的值为0X2102,其中0X是填充值,
表示其后是十六进制数。
该值写在NVRAM中,可使用show version命令查看
这些比特中与启动时加载IOS有关的是最低(最后)的4
个比特位,如表一所示。
表1 寄存器的值
启动区 l6进制
比特位编号 l5 14 l3 l2 ll l0 9 8 7 6 5 4 3 2 l 0
值 0 0 l 0 0 0 0 l 0 0 0 0 0 0 l 0 0X2102值
表2 第0到3比特位对应的启动区每个值的含义
启动区值 含 义 说明
将寄存器的值设置成0 X2100,就可OOo0 ROM监控模式 以进入ROM监控模式,这种模式的提示符
为ROMMON&或&。
0()ol 使用ROM中的IOS 将寄存器的值设置成0 X2101,路由器将从ROM中加载IOS,这种模式的提示
符为Router(boot) &。
ool0 根据NVRAM 中的设置决 根据NVRAM中设置进行相应的启动,如果没有设置,则默认从Flash中加载
一llll 定启动位置 IOS
。
要修改寄存器的值,在全局模式下使用config―register
命令。
如:Router(config)#con.fig―register 0 X2100
Router(config)#exit .(退出配置模式)
Router#shOW version
[cut]
configuration register is 0x2102(will be Ox2100
at next reload)
从上面最后一行的显示可以知道:下次启动路由器
时,寄存器的新值就会产生作用。
IOS加载顺序
38
如果寄存器的值为0010~l1l1,即十六进制的2~F,
则查找IOS文件顺序如下:
(1)从NVRAM中查找boot system命令后,如果存在,
按照该命令指示的位置加载IOS。
例如:Router(config)#boot system flash[slot 0:]
[IOS―Filename]
表示从0号插槽的flash中加载。
Router(config)#boot system tftp[IOS filename][trip
server―ip―address]
表示从T兀P Server加载。
Router(config)#boot system tom
胡 j~:Erase flash,Erase NVRAM命令与CISCO路由器灾难恢复技术 2005年第5期
表示从ROM 中加载。
(2)如果不存在boot system命令就从默认flash中加
载10S。
(3)如果flash中10S被损坏或删除,则试图从网络上
的T兀 server加载10So
(4)如果从网络上的T兀 server加载10S仍然失败,
就进入ROM监控模式。
通过对配置寄存器的分析,NVRAM中不但存有启动
配置文件,而且存有与10S加载密切相关的寄存器值,这
不难看出erase NVRAM 同erase flash一样可以导致路由
器进入ROMMON模式。⋯ -3_
在进入灾难恢复之前,先看一下路由器的Flash里的
文件,用命令:ronllnon l&dir flash:;注意命令中flash后
面跟冒号(:),执行命令后会显示flash现在的10S大小和
文件名、属性及容量(假如10S在flash内)。例如C2600:
1、ronllnon 1 & dir flash:
system falsh directory:
File length Name/status
l 00一i―mz.120―7.bin
[7330984 bytes used,1 057624 available,8338608
tota1]
8 1 92K bytes of processor board system flash (Read/
Write)
如果File name和File size两项都是符合你的要求,那
么也许是你的eonfig―register设置有问题或NVRAM恶意
修改。正常的config―register应该是0x2102,注意0x2102
中的最后一位值2,最后一位值在2到F都是正常的,con―
fig_ register的值控制着路由器的启动。
2、准备10S文件和ⅡYI’P server,如果没有10S文件或
Cisco T兀 软件,你可在Cisco相关网站下载。
首先将10S映像文件拷到Pc机上,安装ftp server应
用软件,并运行该程序,T兀 .server软件在机器装的是
cisco T兀 server目录,那么就把已存在PC机上的10S文
件放在cisco T兀 server目录下,按照图二(或图三)所示
将PC机与路由器连接好,打开控制台PC机的超级终端
工具,连接上Router(路由器),此时窗El中出现的命令行
提示符为:ROMMON l&(其中“l”代表命令行的行数),
在提示符后输入如下命令:
ROMMON l &IP― ADDRESS=ROUTER的IP地址
(需要注意的是该IP要和Tm 软件所在PC机在同一网
段内)。
ROMMON 2 &IP_ SUBNET― MASK=ROUTE R的子网
掩码。
ROMMON 3&DEFAUL1 GATEWAY=默认网关地址
(可以没有也可以是T兀 Server地址)。
ROMMON 4 &TFrP―SERVER=TFrP Server的IP地
址。
ROMMON 5&TFrP―FILE=10S文件名(只给出文
件名,不需要路径)。
ROMMON 6&ftpdnld(文件下载)。
几条命令必须使用大写,而最后一条fit.pd~ad则要用
小写,ftpdnld命令执行后,只要根据提示选择,就可完成
文件的传输。当文件传输完后,将自动回到命令行下,接
着输入Reset重启路由器,回到熟悉的10S模式,这样做,
甚至连以前配置的信息都不会丢失(仅指误用了ertL~
flash命令,若用的erase NVRAM则不然)。
IP:1... / ‘1
eway:l0 .0 .0 . 1 1―◆
PC机
咐 ⋯
r
PC机串口
图2
tot"快速以太口)
O.O 1
tot"控制口)
图3
2005年第5期 胡成:Erase flash,Erase NVRAM命令与C1SCO路由器灾难恢复技术
具体例子为:
rommon 1 & IP― ADDRESS=10.0.0.2
rommon 2 &IP
_
SUBNET
_
MASK =255.255.255.0
rommon 3 & DEFAUUr-GATEWAY=1 0.0.0.1
rommon 4 & TF]1P― SERVER =10.0.0.3
rotnnlon 5 & TFTP― FILE= c2600一i―mz.120―7.bin
rotnnlon 6 & ftpdnld
显示如下:IP―ADDRESS=10.0.0.2
IP― SUBNET_ MASK =255.255.255.0
DEFAULT-GATEWAY=10.0.0.1
T P
―
SERVER:10.0.0.3
TFTP―
F1LE :c2600一i―mz.120―7.bin??
Invoke this command for disaster recovery only.
WARNING:all existing data in all partitions on flash,
will be lost!
Do you wish to continue?y/n:[n]:Y (此行缺省为
no,需要键入yes回车)
系统把前面配置的信息报告出来,以保证没有错误,
并提示该命令仅作灾难恢复使用,而且警告:flash上所有
分区中的数据都将丢失。
Receiving c2600一i―lnz.120 ―7.bin from 10.0.0.3
1 1 1 1 1 1 1 1 1 1.!!!!!!!!!!!!.!!!!!!!!!!!!! (“!”表示传
输成功,“.”表示传输无效)。
File reception completed
Copying file c2600一i―nlz.120―7.bin to flash
Erasing flash at 0x607c000
Program flash location 0x61M40000
此过程完成的是将IOS文件注入Router flash中,此后
ronlnlon 22&reset就可重新启动并进入熟悉的lOS模式,
到此灾难恢复成功。[ ][ ][ ][ ]
3 结 语
路由器是很复杂的设备,能支持很多配置,理解因特
网的工作方式的一种方法就是配置路由器,路由器配置是
一项网络管理人员需要掌握的很重要的技术。尽管实际
的配置非常简单,多次重复后可以使之成为你的一种根深
蒂固的习惯,作为网管,熟练掌握灾难恢复技术是非常必
要的。当路由器开机后进入ROMMON模式时,并不一定
没有IOS,因为有可能寄存器的值被恶意修改了,如果确
认寄存器最后4 bit的值是2,则可以敲入boot或者reset
命令,如果还没有正常启动才表明没有IOS,然后再进行
灾难恢复。也可以使用前面提到的dir flash:命令来查看
flash中是否有IOS文件,如果存在再使用boot或reset重
启。作为一般的网络单位,网管人员对路由器的操作都是
在使用过程中,不可能像做实验一样任你去钻研,任你去
发挥,这就要求我们的网管尽量做好应有的防范措施。譬
如:boot system的合理设置,IOS的备份,T兀’P server的保
证等等,以便尽可能在最短的时间内处理灾难恢复故障。
参考文献:
[1][关]拉莫尔.CCNA学习指南.北京:电子工业
出版社,2004.
[2]CCNA English Version 3.1 htttp://www.eisco.com/
en/US/leaming/netaead/index.htm1.
[3]张国清,李涤非.CCNA(考试号640―801)学习指南
.北京:人民邮电出版社,2004.
[4]http://www.peonline.corn.cn/pcjob/nettech/cisco/
others/;_3.htm1.
[5]http://www.qqread.com/html/m―1.
htm.
[6]http://www.5.9915.com/html/router/cisco/638/
40470.html
【责任编辑杨清平】
Erase Flashs and Erase N M Comman d an d CISC0
Router Disaster Recovery Technique
HU Cheng
(Center for Network Management,Daxian Teachers College,Dazhou Sichuan 635000,China)
Abstract:This paper briefly introduces normal start of router in proper order,emphatically analy zes the value of configuration re~ster
closelv related to the image document loading.Two commands of“erase flash”and“erase nvram”both cause disasterous breakdown of
router,and the technique of disaster recovery is expounded in detail.
Key words:disaster recovery;erase flash;Erase NVRAM;lOS;The mode of ROMMON;configuration register
浏览: 8613 次
要耐得住寂寞,禁得起诱惑,该是你的总会到来,不是你的苦等无用, ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'博客分类:
#include &iostream&
#include &vector&
#include &string&
typedef unsigned short WORD;
int main()
vector&string& vS
vStr.push_back("1");
vStr.push_back("2");
vStr.push_back("3");
vStr.push_back("4");
vStr.push_back("5");
vector&string&::iterator it = vStr.begin();
cout && *it && // ..2......
cout && "------------------------\n";
vStr.erase(it++); // ...it++.++it................,..........
vector&string&::iterator iter = vStr.begin();
for ( iter != vStr.end(); iter++)
cout && *iter &&
cout && "-------------------------\n";
cout && *it && // ..4....3..erase..........................
system("pause");
standalone
浏览: 387772 次
来自: 上海
问题解决了吗?
神,好厉害,这是我找到的唯一可以ac的Java代码,厉害。
One answer I agree with:引用Whene ...
不错!,一开始对这些确实容易犯迷糊
Exception in thread &main& ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(2820)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'vector中erase用法注意事项',
blogAbstract:' vector中的erase方法有些诡异(^_^),稍不注意,就会出错。今天又一次遇到了,就索性总结一下,尤其是在循环体中用',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:4,
permalink:'blog/static/',
commentCount:1,
mainCommentCount:1,
recommendCount:1,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}