在做 pwnable.kr 的 horcruxes 时候,遇到整数溢出的问题,导致脚本不稳定。
这里打算写一下计算机处理整数溢出的方法,以及以后写脚本如何处理溢出。也研究一下一些算法的原理。
计算机组成基础
本来想从数学原理,原码、反码、补码详细阐述,并且加上数学证明。没想到知乎大佬写得太棒了。甚至没有什么可删减的,我全部复制也没什么意义。
把链接放在这里,作为前置知识,本篇就只讲代码手动处理溢出的方式与原理。
二进制的原码、反码、补码——狂风吹我心:这些码产生的原因,以及如何运算,举例丰富。
一文读懂二进制补码 - 从计数原理开始说起 ——红色的红:完整的数学证明,各种情况的举例证明,非常详细的论证。
计算机中均采用补码进行加减运算,有符号整数溢出,采用补码 232 回绕的方式。
简单原理
补码的字面是无符号的,只不过我们把左起第一位比特定义为符号位
无符号范围:0 ~ 4294967295,有符号范围:-2147483648 ~ 2147483647
0x00000000 ~ 0x7FFFFFFF => 0 到 2147483647
0x80000000 ~ 0xFFFFFFFF => 负数
正数很明显是和补码字面对应的,无需操作,而要处理的就是负数。
后半段被映射成负数:
补码字面(HEX表达)
无符号
有符号
0x7FFFFFFF
0x80000000
-2147483648
0xFFFFFFFF
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-291293.htm
[原创]整数溢出的处理方式
260 浏览
0 回复
暂无回复,快来抢沙发吧!