关于溢出的一些体会

1)如果是直接判断符号位:

  1.在进行移位运算的时候要注意,移位运算区分有符号和无符号,有符号的移位操作有风险

  2.从小精度到大精度的强制类型转换不会丢失符号位,之后可以采用移位运算

  3.取每一位还有bitset类可以实现,但是也只支持ulong 和字符串,添加头文件

    #include <bitset>

    using std::bitset;

  4.memcpy可以拷贝内存,这样就可以把精度小的数据类型拷贝到精度到的数据类型中

2)直接和该类型的最大值进行比较,必然要放到更大的类型中才能进行比较。

C格式化输出:

__int32,int  --- %d

long --- %ld

__int64 -- %I64d (windows标准) %lld (linux标准)

float -- %f

double--%lf

unsigned int -- %u

时间: 2024-10-11 16:01:28

关于溢出的一些体会的相关文章

SEED缓冲区溢出实验笔记

缓冲区溢出实验(Linux 32位) 参考教程与材料:http://www.cis.syr.edu/~wedu/seed/Labs_12.04/Software/Buffer_Overflow/ (本文记录了做SEED缓冲区溢出实验的体会与问题,侧重实践,而不是讲解缓冲区溢出原理的详细教程) 1. 准备工作 使用SEED ubuntu虚拟机进行缓冲区溢出实验,首先要关闭一些针对此攻击的防御机制来简化实验. (1)内存地址随机化(Address Space Randomization):基于Lin

20135223何伟钦—信息安全系统设计基础第三周学习总结

信息的表示和处理 2.0三种数字表示 无符号:编码基于传统的二进制表示法,表示大于或者等于零的数字. 补码:编码是表示有符号整数的最常见的方式,有 符号整数就是可以为正或者为负的数字. 浮点数:编码是表示实数的科学记数法 的以二为基数的版本. 溢出(overflow)的例子:使用 32 位来表示数据类型int,计算表达式200*300*400*500会得出结果 -884 901 888. 这违背了整数运算的特性,计算一组正数的乘积不应产生一个为负的结果. 2.1信息存储 机器级程序将存储器视为一

3、软件工程结对开发之求一维数组中连续最大子数组之和并判断溢出

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O(n): 结果溢出之后能判断. 二.设计思想 在我们的前一个程序中,由于int类型rand()随机产生数范围是0~32767,所以产生的1000个数较小,不会产生溢出.但我们通过查资料得知int32最大数是2147

软件工程课堂训练——数组之大数溢出

一.题目及要求: 题目:返回一个整数数组中最大子数组的和. 要求(新加):①要求程序必须能处理1000个元素:②每个元素都是int32类型的. 结对人员:胡亚宝  焦燕 二.设计思路: ①处理1000个元素的问题,我们将数组的长度设为1000,其中的每一个元素都是随机生成,因为这道题目重点是溢出问题,所以我们将它们设的值都比较大: ②现阶段我们将它们都设为int型,超过表示范围时,系统会自动转化成负值,判断后将显示溢出. 1 // 结对开发— 胡亚宝 焦燕 2 3 #include "stdaf

缓冲区溢出漏洞实验 20125108 冯相国

练习1 一.实验描述 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段.这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写. 二.实验准备 系统用户名shiyanlou,密码shiyanlou 实验楼提供的是64位Ubuntu linux,而本次实验为了方便观察汇编语句,我们需要在32位环境下作操作,因此实验之前需要做一些准备. 此过程消耗了不少时间,学校的网速实在太渣. 三.实验步骤

二维数组最大子数组溢出问题

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 数组要足够大,直到溢出. 溢出之后,加判断. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 由于溢出会在最后一次不溢出的结果上加一位,导致寄存器内存不过放置进位导致的溢出,故判断要加在这一次加法的前面. 三.源代码 #include <iostream.h> long int MaxSum2(long

一维数组求最大子数组(解决溢出问题)

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 程序在宏里面定义出了数组长度的大小,在长度超过100万的时候程序直接崩溃,其实这并不是因为结果太大导致的数值溢出,而是因为内存溢出,我们的数组是定义在程序内部的,属于局部变量,存放位置在栈上

结对开发-- 一维数组求和最大的子数组的大数溢出问题

结对人员:韩雪东,高扬 一.设计思路 对于大数溢出问题开始很迷茫,不大懂该干什么,思路匮乏.因为只要溢出这个数就不会被存储被改变,这样导致很难去判断溢出后该怎样做,但后来我们改变了一下思路,采用逆向思维,首先找到能存储的最大数,用它来减去将要运行的数,从而与即将要加的数比较,如果小了咋说明相加后会产生溢出,直接结束程序. 二.源代码 // ceshi.cpp : Defines the entry point for the console application. //作者:韩雪东,高扬 //

缓冲区溢出漏洞实验 20125114 余硕

一.实验描述 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况,这一漏洞可以被 恶意用户利用来改变程序的流控制,甚至执行代码的任意片段.这一漏洞的出现时由于缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写. 二.实验准备 练习1: 3.1初始设置 3.2  shellcode 一般情况下,缓冲区溢出会造成程序崩溃,在程序中,溢出的数据覆盖了返回地址.而如果覆盖返回地址的数据是另一个地址,那么程序就会跳转到该地址,如果该地址存放的是一段精心设计的代码用于实现其他功能,这段代码就是