作家
登录

自上而下,逐步揭开PHP解析大整数的面纱

作者: 来源: 2017-09-18 10:09:47 阅读 我要评论

2-4、于是猜测,ASSIGN操作是在do_cli函数琅绫擎进行的,是以对do_cli函数做断点:break do_cli。

输入n,赓续回车,在sapi/cli/php_cli.c文件的993行之后就走到法度榜样输出结不雅了:

自上而下,慢慢揭开PHP解析大年夜整数的面纱

2-5、再对php_execute_script函数做断点:break php_execute_script,赓续慢慢履行,发明在main/main.c文件的2537行就走到法度榜样输出结不雅了:

自上而下,慢慢揭开PHP解析大年夜整数的面纱

2-6、持续断点的步调:break zend_execute_scripts,反复之前的步调,发明在zend/Zend.c文件的1476行走到了法度榜样输出结不雅的步调:

自上而下,慢慢揭开PHP解析大年夜整数的面纱

看到这里的时刻,第1475行里有一个op_array,就猜测会不会是在op_array的时刻就已经有值了,于是开端打印op_array的值:

自上而下,慢慢揭开PHP解析大年夜整数的面纱

打印之后并没有看到有效的信息,然则其拭魅这里包含有很大年夜的信息量,比如opcode的handler: ZEND_ASSIGN_SPEC_CV_RETVAL_CV_CONST_RETVAL_UNUSED_HANDLER ,然则当时没留意到,是以就想着看看op_array是怎么被赋值的,相干步调做了什么。

2-7、从新大年夜2-5的断点开端,让法度榜样慢慢履行,看到op_array的赋值如下:


看到第1470行将zend_compile_file函数运行的结不雅赋值给op_array了,于是break zend_compile_file,被告诉zend_compile_file不决义,经由过程源码对象追踪到zend_compile_file指向的是compile_file,于是break zend_compile

发明是在Zend/zend_language_scanner.l 文件断点了,慢慢履行,看到这行pass_two(op_array),猜测可能会在这里就有值,所以打印看看:

自上而下,慢慢揭开PHP解析大年夜整数的面纱

结不雅发明照样跟之前的一样,然则此时看到有一个opcodes的值,再打印看看

看到opcode = 38,网上查到38代表赋值

这个问题的原因看起来不太重要,固然学这个对于实际上的营业开辟也没什么竽暌姑,不会让你的开辟才能“duang"地一下上去几个level,然则懂得了PHP对于大年夜整数的处理,也是本身常识框架的一个小小积聚,知道了为什么之后,在日常开辟中就会多加留意,比如大年夜存储以及应用赋值的角度。懂得这个细节照样很有好处的。

自上而下,慢慢揭开PHP解析大年夜整数的面纱

2-8、于是可以知道,在这一步之前就已获得了ASSIGN的opcode,是以,赓续地往前找,大年夜op_array开端初始化时就开端,慢慢打印op_array->opcodes的值,一向都是null,

自上而下,慢慢揭开PHP解析大年夜整数的面纱

自上而下,慢慢揭开PHP解析大年夜整数的面纱

直到履行了 CG(zend_lineno) = last_lineno; 才获得opcode = 38 的值:

自上而下,慢慢揭开PHP解析大年夜整数的面纱

因为这一句:CG(zend_lineno) = last_lineno;是一个宏,所以也没头绪,接近放弃状况。。。

于是先去懂得opcode的数据构造,在 深刻懂得PHP内核书 里找到opcode处理函数查找这一章,给了我一些持续下去的思路。

引用琅绫擎的内容:

自上而下,慢慢揭开PHP解析大年夜整数的面纱

知道其实opcode处理函数的定名是有以下规律的

  1. ZEND_[opcode]_SPEC_(变量类型1)_(变量类型2)_HANDLER 

自上而下,慢慢揭开PHP解析大年夜整数的面纱


  推荐阅读

  新手必看!电脑主板BIOS这么设置才给力

51CTO诚邀您9月23号和秒拍/国美/美团云专家一路聊智能CDN的优化之路,抓紧时光哦! BIOS,英文"Basic Input Output System"的缩略词,直译过来后中文名称就是"根本输入输出体系",这些专业>>>详细阅读


本文标题:自上而下,逐步揭开PHP解析大整数的面纱

地址:http://www.17bianji.com/lsqh/37473.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)