首页 > 编程语言 >Liunx下对php内核的调试

Liunx下对php内核的调试

时间:2023-06-24 23:45:11浏览次数:55  
标签:enable usr -- dev 8.2 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可执行文件目录

先在这两处打断点

image-20230624224500017

接下来执行 run 一个php文件。

image-20230624224544890

step 单步进入该函数。

n下一步

print var 打印变量

image-20230624224657010

该函数运行完后,context的值是。(因为enable-debug了,所以NTS后还有一个debug,正常情况下是没有的)

image-20230624224813841

跳出该函数后,输入 c进入下一个断点。

image-20230624224950243

同样 step单步跳入。可以看到第二个 if语句是进去了,hooks的值为 "\x02"

image-20230624225145094

接下来是个 for循环,一个都没进去,所以 context的值没有更新。最后 context的值是。

image-20230624230302252

把 debug去掉放 python跑一下。

这下跑的结果是正确的。

image-20230624230621876

0x06一些细节

zend_compile_filecompile_file 是不一样的。让我们看看发生了什么。

watch  zend_compile_file

image-20230624231632720

编译时开启 dtrace并且,环境变量中有 USE_ZEND_DTRACE 时才会进入这个if 。 所以这个时候 zend_compile_file是等于 compile_file的。

image-20230624231847063

在phar.c中还会改变一次。之后就会调用 zend_finalize_system_id.

image-20230624232239320

0x07后记

额,源码看不懂,就跟着看了下变量信息,主要简单了解下如何使用gdb调试。

标签:enable,usr,--,dev,8.2,Liunx,php,内核
From: https://www.cnblogs.com/cyyyyi/p/17501886.html

相关文章

  • 教你三步在CentOS 7 中安装或升级最新的内核
    在正常操作期间,内核负责执行两个重要任务:作为硬件和系统上运行的软件之间的接口。尽可能高效地管理系统资源。为此,内核通过内置的驱动程序或以后可作为模块安装的驱动程序与硬件通信。例如,当你计算机上运行的程序想要连接到无线网络时,它会将该请求提交给内核,后者又会使用正确的驱动......
  • 通过内核调试查看当前的输入桌面对象
    通过本地内核调试或者用户双机调试查看当前的用户输入桌面在windbg中搜索win32kbase内核模块的导出符号,找到类似如下的符号xwin32kbase!*grpdeskRitInput*最终定位到的当前桌面对象名称为Default桌面0:kd>xwin32kbase!*grpdeskRitInput*fffff643`216d6c48win32kbase!grpd......
  • PHP用Swoole的WebSocket功能编写聊天室Demo
    前提:linux环境下PHP有可用的Swoole扩展。9501端口可访问。后端<?phpclassHelper{/***@function将数组中的null值转化为空字符串*@param$arrarray要转化的数组*@returnarray*@othervoid*/publicstaticfuncti......
  • 数据库内核:PostgreSQL 存储
    存储管理数据库管理系统的存储管理分级在数据库管理系统中存储管理的目的是:提供页或者元组集合的数据视图将数据库对象(例如表)映射到磁盘文件上管理数据与磁盘存储之间的传输使用缓冲区来减少磁盘/内存之间传输次数将加载的数据还原成为元组是使用访问方法......
  • 使用PhpAmqpLib常用的2种连接rabbitmq的方式
    #connecttoAMQPbrokeratexample.comusePhpAmqpLib\Connection\AMQPStreamConnection;$amqp=newAMQPStreamConnection('example.com',5672,'user','pwd','/host');#SSLorsecureconnectionusephpAmqpLib\Connection......
  • 驱动开发:摘除InlineHook内核钩子
    在笔者上一篇文章《驱动开发:内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩,对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能,此类功能的实现一般可在应用层进行,而驱动层只需要保留一个读写字节的函数即可,将复杂的流程放在应用层实现是一......
  • 驱动开发:摘除InlineHook内核钩子
    在笔者上一篇文章《驱动开发:内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩,对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能,此类功能的实现一般可在应用层进行,而驱动层只需要保留一个读写字节的函数即可,将复杂的流程放在应用层实现是一......
  • Linux内核的一些特点和功能
    Linux内核是一个开源的、免费的操作系统内核,它是Linux操作系统的核心组件。Linux内核负责管理计算机硬件资源,提供基本的系统服务和功能。以下是Linux内核的一些特点和功能:多任务支持:Linux内核支持多任务处理,使得多个应用程序可以同时运行并共享系统资源。设备驱动程序:Linux内核......
  • 操作系统内核的演进过程是一个持续的、不断进化的过程。在操作系统发展的历史中,涌现出
    操作系统内核的演进过程是一个持续的、不断进化的过程。在操作系统发展的历史中,涌现出了许多分支和创新。以下是一些主要的操作系统内核分支和创新:宏内核(MonolithicKernel):宏内核是最早的操作系统内核设计,所有核心功能和设备驱动程序都在内核空间运行。例如,早期的Unix内核就采......
  • PhpStorm 2021.3软件下载及安装教程 绿色破解版 软件大全
    PhpStorm是一款由phpstorm的最新PHP开发软件,使用为用户提供了最全面最强大的开发解决方案。它的功能非常的卡u按,基本上大家需要用到的这里都有,全面满足需求,现在的PHPSTORM在2019年的首个版本已经发布,新版本带来了重大的更新,可以更快的进行调试,通过使用PhpStorm和Xdebug直接在这两个......