php内核编译,如何篡改php可执行程序的版本号?
发布于 作者:苏南大叔 来源:程序如此灵动~事情是这样的,苏南大叔拿着github
上面下载到的phpsrc@7.4.28
,写了好几篇文章了。最近才发现:它显示7.4.27
的字样。开始的时候,苏南大叔觉得可能是自己乱实验搞错了环境。但是,事实是什么样的呢?这个事实又说明了什么问题呢?
大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码的故事。本文讲述如何修改phpsrc
的版本号,编译一个来自未来版本的php
内核。测试环境:win10
,vs2017
,phpsrc@7.4.28
。理论上来说,本文所说的修改方式,在centos
下,也是可以的。
事情起源
苏南大叔发现,自己在github
上面下载的phpsrc
分支7.4.28
,编译出来居然出现了php7.4.27-dev
的字样,差了一个小版本号,这个可是个大问题。难倒这.27-dev
就相当于.28
?
对比windows.php.net
官方提供的源码,可以发现:两者确实存在着一些文件上的差别。居然还能有这种做法?两者源码下载地址:
- https://github.com/php/php-src/archive/refs/heads/PHP-7.4.28.zip
- https://windows.php.net/downloads/releases/php-7.4.28-src.zip
文件修改
经过苏南大叔多次对比发现:控制版本号变化的地方,主要有以下两个文件:configure.ac
[主要控制编译过程中看得见的版本号显示]:
AC_INIT([PHP],[7.4.27-dev],[https://bugs.php.net],[php],[https://www.php.net])
main/php_version.h
[控制最终固化在php内核之中的版本号]:
/* automatically generated by configure */
/* edit configure.ac to change version number */
#define PHP_MAJOR_VERSION 7
#define PHP_MINOR_VERSION 4
#define PHP_RELEASE_VERSION 27
#define PHP_EXTRA_VERSION "-dev"
#define PHP_VERSION "7.4.27"
#define PHP_VERSION_ID 70427
当然,这里的注释解释说,不用直接修改这个地方,会自动同configure.ac
文件同步。不过,苏南大叔在编译过程中,却没有发现被同步的现象,也许是通过目前尚不知晓的方式同步的。
所以,修改这两个文件即可,苏南大叔把它们修改成了9.9.99
。编译过程,请参考下面的文章:
最终编译成功后在phpinfo()
里面,也可以看到9.9.99
的字样,证明php
内核版本号篡改成功。
EXTRA_
版本号里面,不支持中文。所以,不要做这些无谓的尝试了,会出现乱码。
参考文献
- https://windows.php.net/download/
- https://newsn.net/say/phpsrc-compile-win.html
- https://newsn.net/say/centos-phpsrc.html
- https://newsn.net/say/phpsrc-compile-centos.html
综述
php
内核的版本号,其实也是程序员来定义的。所以,既然有内核的源码了,那么其版本号也是可以修改的。下面的就由你自己来发挥了。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。