vs2010 sp1安全的链接拥有的来个

//int&i,j;
for(i=0;i&m_ncDataCodeWord&&&&m_nIndex&!=&-1;&i++)
wData=GetBitStream(4);
if(wData==0)//0000b终止
//AfxMessageBox(&终止符&);
else&if(wData==1)//0001b数字模式
wIndicator=GetBitStream(nIndicatorLenNumeral[m_nVersionGroup]);
for(j=0;j&wIj+=3)
if(j&wIndicator-2)
wData=GetBitStream(10);
m_strData=m_strData+(BYTE)wData/100+'0';&&&&&//此处出现错误2666
m_strData=m_strData+(BYTE)(wData%100)/10+'0';&&&//此处出现错误2666
m_strData=m_strData+(BYTE)wData%10+'0';&&&//此处出现错误2666
else&if&(j&==&wIndicator-2)
wData=GetBitStream(7);
m_strData+=wData/10+'0';&&&&&&//error&C2593:&“operator&+=”不明确
m_strData+=wData%10+'0';&&&&&&//error&C2593:&“operator&+=”不明确
else&if&(j&==&wIndicator-1)
wData=GetBitStream(4);
m_strData=m_strData+(TCHAR)wData+'0';
else&if(wData==2)//0010b字母数字
wIndicator=GetBitStream(nIndicatorLenAlphabet[m_nVersionGroup]);
for(j=0;&j&wIj+=2)
if(j&wIndicator-1)
wData=GetBitStream(11);
m_strData+=BinaryToAlphabet((BYTE)(wData/45));
m_strData+=BinaryToAlphabet((BYTE)(wData%45));
回复讨论(解决方案)
m_strData=m_strData+(BYTE)wData/100+'0';
m_strData=m_strData+(BYTE)(wData/100+'0');
void&FinderPattern::findLineCross()
vector&Line&&crossL
vector&Line&&lineN
vector&Line&&lineC
Line&compareL
for&(i&=&0;&i&&&m_lineAcrossC&i++)
lineCandidate.push_back(m_lineAcross[i]);
for&(unsigned&int&i&=&0;&i&&&lineCandidate.size()&-&1;&i++)
lineNeighbor.clear();
lineNeighbor.push_back(lineCandidate[i]);
for&(unsigned&int&j&=&i&+&1;&j&&&lineCandidate.size();&j++)
if&(line.isNeighbor(lineNeighbor.back(),&lineCandidate[j]))
lineNeighbor.push_back(lineCandidate[j]);
compareLine&=&lineNeighbor.back();
if&(lineNeighbor.size()&*&5&&&compareLine.getLength()&&&
&j&==&lineCandidate.size()&-&1)&{
crossLines.push_back(lineNeighbor[lineNeighbor.size()/2]);
for&(unsigned&int&k&=&0;&k&&&lineNeighbor.size();&k++)
for(unsigned&int&index=0;index&lineCandidate.size();index++)
if(lineCandidate[index].x1==lineNeighbor[k].x1&&&&lineCandidate[index].y1==lineNeighbor[k].y1
&&&lineCandidate[index].x2==lineNeighbor[k].x2&&&&lineCandidate[index].y2==lineNeighbor[k].y2)
lineCandidate.erase(&lineCandidate[index]);// 错误 2 error&C2664:&“std::_Vector_iterator&_Myvec&&std::vector&_Ty&::erase(std::_Vector_const_iterator&_Myvec&)”:&不能将参数&1&从“Line&*”转换为“std::_Vector_const_iterator&_Myvec&”
lineCandidate.erase(&lineCandidate[index]);/----请使用迭代器
跟VC6有关系吗?
你在VC6环境下编译链接通过了吗?执行正确吗?
如果回答都是yes,
lineCandidate.erase(&lineCandidate[index]);
lineCandidate.erase((std::_Vector_const_iterator&_Myvec&)(&lineCandidate[index]));
如果不行,参考下面:(其实我只会复制粘贴)
static_cast、dynamic_cast、reinterpret_cast和const_cast之间的区别
C-style&cast举例:
&double&d;
&i&=&(int)&d;
上面的代码就是本来为double类型的d,通过(int)d将其转换成整形值,并将该值赋给整形变量i&(注意d本身的值并没有发生改变)。这就是典型的c-style类型转换。
下面是一个简单的程序:
#include&&iostream&
using&namespace&
int&main(void)
&&&&&&&&&int&i;
&&&&&&&&&double&d&=&11.29;
&&&&&&&&&i&=&(int)d;
&&&&&&&&&cout&&&&i&&&&
&&&&&&&&&cout&&&&d&&&&
&&&&&&&&&return&0;
输出结果:
我们发现d值本身并没有发生任何变化。
在简单的情况下,上面这种类型转换可以很好地工作,但在C++中往往还是不够的,为此ANSI-C++新标准定义的四个转换符,即
&&&&&static_cast
&&&&dynamic_cast
reinterpret_cast
&&&&&&const_cast
同时在C++环境中,原先的C-Style的类型转换仍旧可以使用。
1)&&static_cast
&&&&用法:static_cast&&typeid&&(expression)
&&&&说明:该运算符把expression转换为typeid类型,但没有运行时类型检查来确保转换的安全性。
&&&&用途:
&&&&a)&用于类层次结构中基类和派生类之间指针或者引用的转换。
&&&&&&&&up-casting&(把派生类的指针或引用转换成基类的指针或者引用表示)是安全的;
&&&&&&&&down-casting(把基类指针或引用转换成子类的指针或者引用)是不安全的。
&&&&b)&用于基本数据类型之间的转换,如把int转换成char,这种转换的安全性也要由开发人员来保证。
&&&&c)&可以把空指针转换成目标类型的空指针(null&pointer)。
&&&&d)&把任何类型的表达式转换成void类型。
&&&&注意:&static_cast不能转换掉expression的const、volitale或者__unaligned属性。
2)&&dynamic_cast
&&&&用法:dynamic_cast&&typeid&&(expression)
&&&&说明:该运算符把expression转换成typeid类型的对象。typeid必须是类的指针、类的引用或者void*。如果typeid是类的指针类型,
&&&&&&&&那么expression也必须是指针,如果typeid是一个引用,那么expression也必须是一个引用。一般情况下,dynamic_cast用
&&&&&&&&于具有多态性的类(即有虚函数的类)的类型转换。
&&&&&&&&&&&&&&&dynamic_cast依赖于RTTI信息,其次,在转换时,dynamic_cast会检查转换的source对象是否真的可以转换成target类型,
&&&&&&&这种检查不是语法上的,而是真实情况的检查。先看RTTI相关部分,通常,许多编译器都是通过vtable找到对象的RTTI信息
&&&&&&&的,这也就意味着,如果基类没有虚方法,也就无法判断一个基类指针变量所指对象的真实类型,这时候,dynamic_cast只能
&&&&&&&用来做安全的转换,例如从派生类指针转换成基类指针。而这种转换其实并不需要dynamic_cast参与。也就是说,dynamic_cast
&&&&&&&是根据RTTI记载的信息来判断类型转换是否合法的。
&&&&用途:主要用于类层次之间的up-casting和down-casting,还可以用于类之间的交叉转换。在进行down-casting时,dynamic_cast
&&&&&&&&具有类型检查的功能,比static_cast更安全。检测在运行时进行。如果被转换的指针不是一个被请求的有效完整的对象指针,
&&&&&&&&返回值为NULL。当用于多态类型时,它允许任意的隐式类型转换以及相反过程。不过,与static_cast不同,在后一种情况里
&&&&&&&&(注:即隐式转&换的相反过程),dynamic_cast会检查操作是否有效。也就是说,它会检查转换是否会返回一个被请求的有
&&&&&&&&效的完整对象。
&&&&注意:dynamic_cast不能转换掉expression的const、volitale或者__unaligned属性。
3)&&&reinterpret_cast
&&&&&用法:reinterpret_cast&&typeid&(expression)
&&&&&说明:转换一个指针为其他类型的指针,也允许将一个指针转换为整数类型,反之亦然。这个操作符能够在非相关的类型之间进行
&&&&&&&&转换。操作结果只是简单的从一个指针到别的指针的值的二进制拷贝,在类型之间指向的内容不做任何类型的检查和转换。这
&&&&&&&&是一个强制转换。使用时有很大的风险,慎用之。
&&&&&注意:reinterpret_cast不能转换掉expression的const、volitale或者__unaligned属性。
4)&&&const_cast
&&&&&用法:const_cast&typeid&(expression)
&&&&&说明:这个类型操纵传递对象的const属性,或者是设置或者是移除。如:
&&&&&&&&&&&Class&C{…}
&&&&&&&&&&&const&C*&a&=&new&C;
&&&&&&&&&&&C*&b&=&const_cast&C*&(a);
&&&&&&&&&&&如果将上面的const_cast转换成其他任何其他的转换,编译都不能通过,出错的信息大致如下:
&&&&&&&&&&&“…cannot&convert&from&'const&class&C&*'&to&'class&C&*'”。
&&&&&下面的代码是四种casting方法的典型用法示例:
&&&&&#include&&iostream&
&&&&&using&namespace&
&&&&&class&Base
&&&&&public:
&&&&&&&&&int&_
&&&&&&&&&virtual&void&printinfo()
&&&&&&&&&{
&&&&&&&&&&&&&&cout&&&&_base&&&&
&&&&&&&&&}
&&&&&class&Derived&:&public&Base
&&&&&public:
&&&&&&&&&int&_
&&&&&&&&&virtual&void&printinfo()
&&&&&&&&&{
&&&&&&&&&&&&&&cout&&&&_derived&&&&
&&&&&&&&&}
&&&&&int&main(void)
&&&&&&&&&Base&&&&b1;
&&&&&&&&&Derived&d1;
&&&&&&&&&int&&&&aInt&&&&=&10;
&&&&&&&&&long&&&aLong&&&=&11;
&&&&&&&&&float&&aFloat&&=&11.11f;
&&&&&&&&&double&aDouble&=&12.12;
&&&&&&&&&Derived*&pd&=&static_cast&Derived*&(&b1);&&&&&&&//&down-casting&不安全
&&&&&&&&&Base*&&&&pb&=&static_cast&Base*&(&d1);&&&&&&&&&&//&up-casting&&&安全
&&&&&&&&&Derived&&d&=&static_cast&Derived&&(b1);&&&&&&&&&//&down-casting&不安全
&&&&&&&&&Base&&b&=&static_cast&Base&&(d1);&&&&&&&&&&&&&&&//&up-casting&&&安全
&&&&&&&&&aInt&=&static_cast&int&(aFloat);&&&&&&&&&&&&&&&&//&基本数据类型转换
&&&&&&&&&void*&sth&=&static_cast&void*&(&aDouble);&&&&&&&//&将double指针类型转换成void指针类型
&&&&&&&&&double*&bDouble&=&static_cast&double*&(sth);&&&&//&将void指针类型转换成double指针类型
&&&&&&&&&cout&&&&*bDouble&&&&
&&&&&&&&&Base*&pb1&=&dynamic_cast&Base*&(&d1);
&&&&&&&&&//Derived*&pd1&=&dynamic_cast&Derived*&(&b1);&&&//&编译时有warning,运行时出错
&&&&&&&&&int&bInt&=&reinterpret_cast&int&(pb1);&&&&&&&&&&//&将地址或指针转换成整数
&&&&&&&&&cout&&&&bInt&&&&
&&&&&&&&&pb1&=&reinterpret_cast&Base*&(bInt);&&&&&&&&&&&&//&将整数转换成地址或指针
&&&&&&&&&int*&cInt&=&reinterpret_cast&int*&(&aFloat);&&&&//&这个转换的结果会出乎意料
&&&&&&&&&cout&&&&(int)*cInt&&&&
&&&&&&&&&const&Base*&bBase&=&new&Base();
&&&&&&&&&Base*&cBase&=&const_cast&Base*&(bBase);
&&&&&&&&&//Base*&dBase&=&dynamic_cast&Base*&(bBase);&&&&&//&不能通过编译
&&&&&&&&&//Base*&eBase&=&static_cast&Base*&(bBase);&&&&&&//&不能通过编译
&&&&&&&&&//Base*&fBase&=&reinterpret_cast&Base*&(bBase);&//&不能通过编译
&&&&&&&&&return&0;初探VS2010缓冲区安全检查 - CSDN博客
初探VS2010缓冲区安全检查
(是原创,转自自己的人人,而该人人已经注销)。
&&&&&&&& 今天做一个缓冲区溢出的实验,然后各种奇葩,各种与资料出入。然后OD跟进,观察汇编代码和堆栈数据,发现是VS2010的缓冲区安全检查在搞鬼。查阅网上资料,发现还是有点出入或者不全吧。这里与大家分享一下我的发现。
&&&&&&&& 缓冲区溢出是很多漏洞的具体表现形式,而VS在这方面引入了一个GS编译选项。如果选择该选项,则在编译过程中vs会对相关的“可能有问题的”函数加入自己的代码来检查缓冲区溢出。而_security_cookie是它加入到问题函数堆栈中的一个双字(四字节)变量。根据网上的说法,这个变量是放在堆栈中存放“上个函数的EBP值”的元素上面(以“上”为内存地址小的方向),这样如果缓冲区溢出并且修改了函数返回地址,则一定会覆盖本_security_cookie,通过在函数返回之前检查之则可得出结论是否缓冲区溢出。如果溢出,直接终止进程。
&&&&&&&& 然而在实验中,并没有修改返回地址,却还是被无情的终结了。通过关闭GS选项,则没有此问题。
&&&&&&&& 那么就让我们看看GS选项到底干了什么?
&&&&&&&& 测试代码:
int verify_password (char *password)
&&&&&&&& int authenticated=0x555555;
&&&&&&&& char buffer[44];
&&&&&&&& authenticated=strcmp(password,PASSWORD);
&&&&&&&& strcpy(buffer,password);
&&&&&&&& OD查看相关部分代码,即有问题的函数,发现在开头多了如下代码:
单步执行,发现压入的是_security_cookie和EBP的异或值,而且这个值是在我们返回值的上面!并不是在原EBP值的上面,而是紧紧贴着缓冲区尾部。这样不一定要修改返回地址,只要修改超出尾部的数据,就会修改安全值,导致被终结。
EAX异或后的值
堆栈中的值
&&&&&&&& 微软的东西,还真是花样多啊。不过话说这样的溢出在用到C++string类还会有么?呵呵,再议再议。今天也就是我这只小菜鸟练练手吧。西西软件下载最安全的下载网站、值得信赖的软件下载站!
您的位置:
→ VS2010写的程序在自己电脑可以运行、其他电脑上不能运行的解决方案
自己用 2010 旗舰版写了一个软件,在自己电脑上运行完全没有问题,但是拷贝到其他人电脑上之后不管双击还是以管理身份运行,均没有反应,器中相关进程也只是一闪而过。之后在网上搜得说是改为使用mfc静态链接,我也相应的改了,然后生成的release,可是还是在其他人电脑上没有反应。无奈,只好在网上继续搜索结果,最后定在是不是.版本的问题上,网上说改为2.0版本可以解决,然后我就打开项目属性,悲剧的发现目标Framework 直接显示的4.0,连下拉条都没有...而且我的通用属性的配置及平台选项均是不适用状态...我又新建一mfc工程,在新建菜单时上方有可以选择的.net 版本,我选择了2.0版本,但是新建之后打开属性它还是显示的4.0!& 继续在网上搜索之后,得知安装 3.5 sp1之后可以解决问题,然后我就开始安装.net 3.5 sp1,但是无论是下载在线安装版还是完整安装版,都安装不起,有三种状况:1、无论点击那个安装都没有反应....也没有相应进程2、多次重启之后终于有了反应,但是打开没一会就提示我必须使用“打开或关闭windows功能”才可以安装或配置.net 3.5,我也照着做了,在“打开或关闭...”中不断地勾上它,重启,打开vs2010,没有变化,去掉它,重启,打开vs2010,新建项目时就只有4.0一个选项了。然后再去掉它,重启,打开vs,又恢复原来的样子,还是不行,重复了多遍之后,彻底无语了。3,继续搜啊搜,发现win7 是自带了.net 3.5的,但是我就是不能用呢!!然后我继续在“打开关闭windows功能”中去掉.net 3.5的勾,重启,安装.net 3.5 sp1,他终于进入安装了,但是在安装到一半多的时候被程序兼容性助手阻止了!!说.net framework 3.5 sp1&language pack包会导致什么系统不能启动....随后我自己去官网下载了.net framework 3.5 sp1 language pack 64位安装包,单独安装也是被阻止!(此处引用百度知道)1、首先你做一个最简单的程序去测试,看看能否发布成功。如果能,第二步,检查程序。第三步,拷到具有相同环境的机器上,看能否运行。(如果不能,说明你的环境有问题)2、如果不能发布成功,检查你的环境,或者你的vs配置。我碰到的问题如下:1、在本机上可以运行,但是放到其它机器上不能运行,大概会在线程中出现十秒的样子,然后自动被干掉,估计就是程序的问题了。然后把代码拷到别人机器上运行,靠竟然出现了绝对路径(我觉得自己很SB)然后我弱弱的注释掉了。就这样一直不行一直调试,直到天黑。你发现什么问题了吧,对就是我的路径,我怎么用绝对路径了呢,是大意了还是水平不行吧。2、值得注意的是,我竟然还有资源文件没有拷贝进去,copy,past,搞定总结:1、碰到问题从最简单的开始测试2、千万不要写绝对路径,会死人的3、想好了再动手,出问题了不能敷衍,没搞好问题的根源就在那,想想为什么报错。4、打开文件的地方(这里被我忽略了),数据连接的地方必须抛出异常。
阅读本文后您有什么感想? 已有
人给出评价!
访问量多的保护眼睛的VS主题,适用于VS2008、VS2010 - 其它 - 安全技术 - 码农网(全站资源免积分下载)
保护眼睛的VS主题,适用于VS2008、VS2010
保护眼睛的VS主题,适用于VS2008、VS2010(其他文档,8KB,免1积分)
赞助商链接
下载信息载入中...&&&&&&
请输入验证码:
下载说明:
1、推荐使用WinRAR v3.10 以上版本解压本站资源。
2、本站上所有资源均为网友收集上传。本站所有资源仅供学习和研究使用,不得用于任何商业用途。如有需要请购买正版。如有侵犯你版权的,请给我们发邮件,本站将立即改正。
3、下载本站资源时,如果服务器暂不能下载请过一段时间重试!
4、本站和网警密切配合,对发布违法资源零容忍。
VS,主题,保护眼睛其他文档8KBVS,主题,保护眼睛其他文档8KB眼睛,vs2005设置rar文件3KB保护眼睛责无旁贷音乐文档6.03MB保护眼睛颜色doc文件20KB屏幕保护眼睛doc文件53KB保护眼睛doc文件10KB护眼zip文件763KB测视力zip文件136KB【经典】VS2008其他文档217.84KB您的位置: &
本文旨在与园友分享VS2010的强大debug功能,此所谓“工欲善其事,比先利其器”!
&&&&&& 一、通过VS2010可以将断点保存成本地文件(xml格式)
  假设当代码中有CRUD(增、删、改、查)功能时,我们debug增加功能时在代码内设置了一个断点进行查错。再检查删除时又要为删除代码设置一个断点并且要清除上一个为debug增加功能时设置的断点。在VS2010之前我们似乎常常这样做,但现在通过VS2010我们可以将断点保存起来!其实也就是可以为所有断点设置一个解决方案。下次需要debug的时候直接导入先前导出的断点解决方案(xmL文件)。具体请参看下图:&&&&&&&&&&
  鼠标停留的按钮就是导出功能键(VS2010-&Debug-&Windows-&Breakpoints)右边就是导入断点按钮。
  二、调试数据提示(DataTip)
  提到这个功能,只能用更加强大来形容了。大家在debug一段复杂代码时,常常会用鼠标停留在一个变量上修改该变量的值,进行debug。当然这个功能VS2008早就具备了。那如何让debug时的数据提示(DataTip)更方便的显示呢?请看下图:
  将鼠标停留在arrTechnology[i]这个对象上,然后弹出提示框如上图,接着点击提示框的最右边的箭头:
  这样就可以让提示框悬停在我们的编码区域内,点击菜单叉号,就可以移除datatip,点击双向下双箭头就可以为datatip加入注释:
  datatip右侧菜单的一头一尾的按钮都介绍过了,中间的"pin"按钮功能就更强大了。如果点击&pin&图标可以让我们设置好的datatip悬停在整个VS2010的所有编码文件内。具体请看下图:
  我们在Program.cs工作区域内可以见到datatip。
  如果点击&pin&图标后再当把VS2010切换到Test.cs 文件时,我们一样可以看见datatip提示!请看下图:
  当然了断点都可以保存成解决方案,这个Datatip 一样可以保存起来:(VS2010-&Import DataTips)导出 xml 文件,下次通过(VS2010-&Export DataTips)载入您的datatip debug方案。
  三、其他VS2010快捷功能
  还有一些VS2010快捷功能这里就不详细叙述了,比如Tab的float 与dock、ctrl + 鼠标滚轮放大或缩小代码等。VS2010确实是一个不错的开发工具,比先前版本更加方便我们日常开发了!-----&科技以人为本&!
  最后希望本篇文章可以给您带来帮助,如有不足之处欢迎指出,谢谢!
上一篇:下一篇:

我要回帖

更多关于 vs2010 sp1 的文章

 

随机推荐