fate0 / xmark

A PHP7 extension that can hook most functions/classes and parts of opcodes
BSD 3-Clause "New" or "Revised" License
239 stars 32 forks source link

Ubuntu 18.04 apt安装php7.2 hook var_dump 报错:Segmentation fault (core dumped) #6

Closed Li4n0 closed 5 years ago

Li4n0 commented 5 years ago

如题环境下,使用文档中给出的测试样例,会出现core dumped:

root@6fa7350e1192:/home/xmark# cat test.php 
<?php

function var_dump(...$args) {
    echo "in custom var_dump\n";
    _var_dump(...$args);
}

var_dump(1);
root@6fa7350e1192:/home/xmark# php7.2 -d "xmark.rename_functions=var_dump:_var_dump" test.php 
Segmentation fault (core dumped)

hook 其他函数正常:

root@6fa7350e1192:/home/xmark# cat 1.php
<?php
function print_r($a){
    echo "custom print_r\n";
    _print_r($a);
}

print_r(1);
root@6fa7350e1192:/home/xmark# php7.2 -d "xmark.rename_functions=print_r:_print_r" 1.php 
custom print_r
1
fate0 commented 5 years ago

你的 php 版本是 7.0 还是 7.2 ???

Li4n0 commented 5 years ago

title打错了。。是7.2

fate0 commented 5 years ago

我使用 docker pull ubuntu:18.04

然后

apt install php7.2-dev
git clone https://github.com/fate0/xmark.git
cd xmark/
phpize
./configure 
make
make test
php -n -d "extension_dir=./modules/" -d "extension=xmark.so" -d "xmark.enable=1" -d "xmark.rename_functions=var_dump:_var_dump" test.php

并没有复现这个问题,请问你是怎么出现这个问题的? phpize 信息是什么?

Li4n0 commented 5 years ago

我使用 docker pull ubuntu:18.04

然后

apt install php7.2-dev
git clone https://github.com/fate0/xmark.git
cd xmark/
phpize
./configure 
make
make test
php -n -d "extension_dir=./modules/" -d "extension=xmark.so" -d "xmark.enable=1" -d "xmark.rename_functions=var_dump:_var_dump" test.php

并没有复现这个问题,请问你是怎么出现这个问题的? phpize 信息是什么?

以下是我的 phpize 信息:

phpize7.2 -v                                                                                         
Configuring for:
PHP Api Version:         20170718
Zend Module Api No:      20170718
Zend Extension Api No:   320170718

我触发的流程:

git clone https://github.com/fate0/xmark.git
cd xmark/
phpize7.2
./configure 
cp moudles/xmark.so usr/lib/php/20170718/xmark.so
php -d "extension=xmark.so" -d "xmark.enable=1" -d "xmark.rename_functions=var_dump:_var_dump" test.php
[1]    1712 segmentation fault (core dumped)  php -d "extension=xmark.so" -d "xmark.enable=1" -d  test.php

随后修改 test.php 的内容,尝试 hook print_r:

<?php
function print_r($a){
    echo "1\n";
    _print_r($a);
}
print_r(11111111);
php -d "extension=xmark.so" -d "xmark.enable=1" -d "xmark.rename_functions=print_r:_print_r" test.php
1
11111111

我在docker和本地环境中均存在此问题。

fate0 commented 5 years ago

抱歉,实在没复现成功,能否告知 docker image 是哪个,之后如何安装的 php,或者能否提供一个 Dockerfile

Li4n0 commented 5 years ago

https://send.firefox.com/download/86d20b4c88/#1weLYwLzDnXh0l4XoDbaWg 这是我使用的 Dockerfile

fate0 commented 5 years ago

用了你的 Dockerfile,之后 apt install php7.2-dev 还是没法复现。。。

Li4n0 commented 5 years ago

用了你的 Dockerfile,之后 apt install php7.2-dev 还是没法复现。。。

抱歉这两天有比赛,回复得晚了,我又换了服务器环境测试发现同样的 Dockerfile 内没问题...本地18.04和本地 Docker 容器内都存在这个问题,想来应该是我本地电脑的问题了。感谢师傅这几天的耐心调试。

rmb122 commented 4 years ago

测试的时候发现同样情况, gdb 看了一下

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff536c119 in ?? () from /usr/lib/php/modules/xdebug.so

应该是与 xdebug 的 var_dump 冲突了,把 xdebug 去掉后运行正常,不知道你是不是同样的问题