php内核编译,用于php内核编译的zend函数有哪些?
发布于 作者:苏南大叔 来源:程序如此灵动~有了phpsrc
内核的源码之后,可以做什么事情?phpsrc
内核的源码,其实是基于zend
框架的c
语言。这东西的编程和php
其实是没有啥关系了。所以,以为php
写的好?就一定能够搞定phpsrc
内核么?显然是不成立的。因为这个已经是另外一门语言(c
语言)的范畴了。
大家好,这里是苏南大叔的"程序如此灵动"博客,这里讲述苏南大叔和计算机代码的故事。本文中,将要讲述在phpsrc
中两个可以用于拦截的函数,分别是:zend_compile_string
和zend_compile_file
。测试环境:win10
,phpsrc@7.2
。主要被操作的文件是:zend/zend_language_scanner.c
文件。虽然被测试的phpsrc
代码很古老,但是原理是一致的。
写在前面
以zend_compile
开头的函数,理论上都可以用于拦截挂载。但是,由于学艺不精,目前苏南大叔仅仅尝试了上述两个函数,分别是:zend_compile_string
和zend_compile_file
。(具体的代码里面可能会省略zend
字样,具体问题请具体分析)
通过对phpsrc
源码的更多理解,可能会有更合适的拦截点位置,这个可以保持持续关注。
拦截点一,zend_compile_string
zend
内置的函数zend_compile_string
,可以用于拦截eval
等php
函数。这类php
函数都具有的特点是:可以从字符串里面解析出php
逻辑。这类函数有:eval
、assert
、call_user_func
、call_user_func_array
、create_function
等。
要拦截的关键函数是*compile_string
,变量是:*source_string
。
拦截点二,zend_compile_file
zend
内置的函数zend_compile_file
,可以用于拦截其它扩展加工处理过的代码。在所有源码被还原,进而需要进入opcode
环节的时候,进行拦截。
要拦截的关键函数:*compile_file
,变量是:*file_handle
。
相关文献
总结
资料显示,还有个函数叫做zend_include_or_eval
,也是个可以监控的地方,不过,暂时没有实验。
当然了,本文破解方式也不是万能的,目前有一款收费的扩展xload
,并没有被解开。但是从单独调试php
走向上可以得到一些线索,暂留坑。
phpsrc
源码是基于c
语言的,编译过程是比较痛苦的。为了修改其中的某些函数,不断调试的话,也是需要很多的编程经验的。有关这方面的文章,苏南大叔决定设置个标签,叫phpsrc
。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。