PHP_数组溢出分析

本文探讨了在PHP 7.4.0环境中,数组溢出的现象和影响。作者通过测试发现,当使用自动下标给越界位置的数组赋值时,会产生赋值失败并返回null,这可能被用于绕过某些CTF_web挑战。此外,文章指出在PHP的某些版本中,溢出行为有所不同,5.6.40版本在2^63-2时就开始将变量识别为浮点型,而在7.4.0版本中则在2^63位置发生溢出。
摘要由CSDN通过智能技术生成

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);
<
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值