防止黑客侵入你正在使用的Windows系统
2010-10-15 11:31
337 查看
C中存在两类的整数算术运算:有符号运算和无符号运算.
在无符号运算中是不存在溢出的说法.在有符号运算中就有可能会出现了.如果有有符号运算中存在一个操作数是无符号的.则这时另一个有符号数就会变转换为无符号数.因此也不可能会存在溢出.
若两个操作数都是有符号运算的话.那么就有可能会发生溢出了.
举个很简单的例子(书上的)
如果:a.b是两个非负整型变量.需要检查a+b会不会溢出.
想当然的方式是:
if(a+b<0)
complain();
此时我们可以进行认为在某些计算机上加法运算将检查一个内部的寄存器的四种状态:正.负.零.溢出.
当加法操作:a+b相加--à检查该内部寄存器的标志:负.当然加法操作发生溢出时.这时候的寄存器的状态是溢出而不是负了.则if语句检查失败.
正确的方法:
if((unsigned)a+(unsigned)b>INT_MAX)
complain();
另一种方法:
if(a>INT_MAX-b)
complain();
本文出自 “鸡蛋仔” 博客,谢绝转载!
在无符号运算中是不存在溢出的说法.在有符号运算中就有可能会出现了.如果有有符号运算中存在一个操作数是无符号的.则这时另一个有符号数就会变转换为无符号数.因此也不可能会存在溢出.
若两个操作数都是有符号运算的话.那么就有可能会发生溢出了.
举个很简单的例子(书上的)
如果:a.b是两个非负整型变量.需要检查a+b会不会溢出.
想当然的方式是:
if(a+b<0)
complain();
此时我们可以进行认为在某些计算机上加法运算将检查一个内部的寄存器的四种状态:正.负.零.溢出.
当加法操作:a+b相加--à检查该内部寄存器的标志:负.当然加法操作发生溢出时.这时候的寄存器的状态是溢出而不是负了.则if语句检查失败.
正确的方法:
if((unsigned)a+(unsigned)b>INT_MAX)
complain();
另一种方法:
if(a>INT_MAX-b)
complain();
本文出自 “鸡蛋仔” 博客,谢绝转载!
相关文章推荐
- 防止黑客侵入你正在使用的Windows系统(克隆管理员账户)
- 防止黑客侵入你正在使用的Windows系统
- 防止***侵入你正在使用的Windows系统
- 预防黑客侵入你正在使用的Win系统(隐藏帐号)
- 防止黑客入侵你正在使用的Windows操作系统
- 关闭SQL SERVER用户进程,防止因为用户正在使用数据库,导致数据库恢复或删除失败
- 黑客正在使用DNS翻新DDOS攻击的手法
- 4大步骤 防止黑客通过Explorer侵入系统
- 使用Denyhosts防止黑客SSHD扫描
- IIS7出现“另一个程序正在使用此文件,进程无法访问”
- 防止重复提交表单---Struts中Token的使用方法
- 在Win2000-XP上安静地替换正在使用的系统文件
- 将木马拒之门外 设置电脑防止黑客入侵
- 尝试释放正在使用的 RCW。活动线程或其他线程上正在使用该 RCW。释放正在使用的 RCW 的尝试会导致损坏或数据丢失。
- Windows7中出现“文件正在被另一个人或程序使用”
- Git客户端TortoiseGit(Windows系统)的使用方法
- Vmware打开服务器的时候提示“该虚拟机似乎正在使用中。”
- [Tip]使用命令行在Windows系统中查看机器配置
- GDI对象和CDC的使用方法(防止资源泄漏)
- Linux系统防止黑客NMAP扫描的方法