Liunx下对php内核的调试
2023/6/25 1:22:18
本文主要是介绍Liunx下对php内核的调试,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
0x01前言
主要是对上一篇文章中php_again
这道题的补充。
0x02下载php源码
cd /usr/local wget https://www.php.net/distributions/php-8.2.2.tar.gz tar -zxvf php-8.2.2.tar.gz && cd php-8.2.2
0x03编译
注意带enable-debug
apt-get install build-essential autoconf automake libtool libsqlite3-dev pkg-config libjpeg-dev libpng-dev libxml2-dev libbz2-dev libcurl4-gnutls-dev libssl-dev libffi-dev libwebp-dev libonig-dev libzip-dev ./configure --prefix=/usr/local/php --sysconfdir=/etc/php/8.2 --with-openssl --with-zlib --with-bz2 --with-curl --enable-bcmath --enable-gd --with-webp --with-jpeg --with-mhash --enable-mbstring --with-imap-ssl --with-mysqli --enable-exif --with-ffi --with-zip --enable-sockets --with-pcre-jit --enable-fpm --with-pdo-mysql --enable-pcntl --enable-debug make && make install cd /usr/bin ln -s /usr/local/php/bin/php php8.2 cp /usr/local/php-8.2.2/php.ini-development /usr/local/php/lib/php.ini cp /etc/php/8.2/php-fpm.conf.default /etc/php/8.2/php-fpm.conf cp /etc/php/8.2/php-fpm.d/www.conf.default /etc/php/8.2/php-fpm.d/www.conf
0x04下载gdb工具
apt-get update apt install gdb
0x05调试样例
调试php中 生成 system_id的两个函数(zend_startup_system_id,zend_finalize_system_id),分别在 mian.c文件的第2237行
和第2288
行
cd /usr/local/php/bin #即php可执行文件目录
先在这两处打断点
接下来执行 run 一个php文件。
step 单步进入该函数。
n下一步
print var 打印变量
该函数运行完后,context
的值是。(因为enable-debug了,所以NTS后还有一个debug,正常情况下是没有的)
跳出该函数后,输入 c
进入下一个断点。
同样 step单步跳入。可以看到第二个 if语句是进去了,hooks的值为 "\x02"
接下来是个 for循环,一个都没进去,所以 context
的值没有更新。最后 context
的值是。
把 debug去掉放 python跑一下。
这下跑的结果是正确的。
0x06一些细节
zend_compile_file
和 compile_file
是不一样的。让我们看看发生了什么。
watch zend_compile_file
编译时开启 dtrace
并且,环境变量中有 USE_ZEND_DTRACE
时才会进入这个if 。 所以这个时候 zend_compile_file
是等于 compile_file
的。
在phar.c中还会改变一次。之后就会调用 zend_finalize_system_id
.
0x07后记
额,源码看不懂,就跟着看了下变量信息,主要简单了解下如何使用gdb调试。
这篇关于Liunx下对php内核的调试的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-19php8的协程和hyperf的协程有什么区别?-icode9专业技术文章分享
- 2024-12-19php8 的fiber是什么?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-11-29使用PHP 将ETH账户的资产汇集到一个账户
- 2024-11-23怎么实现安卓+php 热更新方案?-icode9专业技术文章分享
- 2024-11-22PHP 中怎么实现判断多个值是否为空、null 或者为 false?-icode9专业技术文章分享
- 2024-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享