PHP_数组溢出分析
前排提示,注意看目录
环境:php 7.4.0
首先,在一个64位系统中,php里面int型变量所占内存大小为64位,其中最前面的一位为符号位,0表示正数,1表示负数
本文全程以64位系统中的php着手,从比特位的角度分析,为了便于表示,本文大部分将采用0x数,即16进制数表示,即
0x7FFFFFFFFFFFFFFF(16进制) == 9223372036854775807(10进制) == 0b0111111111111111111111111111111111111111111111111111111111111111(二进制)
0x000000000000000A(16进制) == 10(10进制) == 0b0000000000000000000000000000000000000000000000000000000000001010(二进制)
int变量测试
一个int型的变量的字节表示从全0开始,每次加一,即对应的十进制大小加一,即
正,大数:
$num1=0x7FFFFFFFFFFFFFFA;
var_dump($num1);
$num1++;
var_dump($num1);
负数,十六进制:
echo(dechex(-9223372036854775806)); //该数为int型边界值减二
var_dump(-9223372036854775806);
-2测试:
echo(dechex(-2));
var_dump(0xFFFFFFFFFFFFFFFE); //对照代码执行图,php将-2十六进制解析为0xFFFFFFFFFFFFFFFE
$num2=0xFFFFFFFFFFFFFFFE; //却将0xFFFFFFFFFFFFFFFE解析为浮点型
var_dump($num2);
负数,十进制:
$num2=-9223372036854775806;
var_dump($num2);
$num2++;
var_dump($num2);
<