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。