非烫即屯

栏目: C++ · 发布时间: 5年前

好久没有打开过VC++了,今天为了修改一个远古控件打开了久违的VC++,DEBUG模式下又看到了久违的”烫烫烫烫烫”~~~~

VC runtime debug version会把stack初始化成0xcc,unicode中0xcccc(双字节)就是中文的烫。如果你开了个char[],然后最后一个字符忘了设置成0x00,然后去printf这个字符,那么整个stack从这个局部字符数组开始都输出到console,就变成了“烫烫烫烫烫”。

为啥把stack初始化成0xcc而不是0x00呢?是因为0xcc在intel x86芯片指令集中代表int 3,也就是debug中断,该指令会自动把程序停在单步调试状态,然后去寻找系统中注册的调试器,如果找不到调试器,那么就会终止程序。这一开始是为了调试栈缓冲溢出错误的。如果出现溢出,并且代码尝试执行缓冲中的指令,就会进入单步调试状态。

这是debug version, 那么release verion呢?发布版会把栈初始化成0xcd,这个就是imm8,就是立即中断退出的意思。这时候因为运行在用户机器上,没有调试器,也不希望用户来调试你的程序。0xcdcd就是中文的“屯”字。你会看见一些写的超烂的程序经常会出现“屯屯屯屯屯屯”。的确挺屯的,

在今天这个芯片DEP,操作系统NX锁定双保险的时代,这种初始化已经没有啥必要了,这个烫屯还存在纯粹是历史原因。

所以在那个电脑还比较古早的年代,说人品不好,那叫非奸即盗。说程序写的烂,那叫非烫即屯。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

海星模式

海星模式

奥瑞·布莱福曼、罗德·贝克斯特朗 / 李江波 / 中信出版社 / 2008-1 / 36.00元

如果砍掉一只蜘蛛的脑袋,毫无疑问它会死掉;但是砍掉海星的一条手臂,它却会长出一只新的来,就连那只砍掉的手臂也会长成一个完整的新海星。传统意义上自上而下的组织模式就像蜘蛛,然而现在正在改变着企业和世界面貌的却是海星型组织。 维基百科、craigslist和Skype的成功下面隐藏着什么样的力量?易趣公司和通用电气公司与废奴和女权运动又有什么共同之处?到底是什么样的重大选择使得通用汽车公司与丰田......一起来看看 《海星模式》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具