【发布时间】:2011-11-30 11:18:59
【问题描述】:
我们做了一个 Zend 扩展,我们想要写出 zval 的 echo 应该写出的地址,但是我们不知道如何接收它们,因为我们注意到 echo "test" 之间存在差异;和 $a = "测试";回声$a;
.... Some stuff that overrides the echo opcode ....
FILE *tmpfile;
int echo_handler(ZEND_OPCODE_HANDLER_ARGS)
{
zend_op *opline = execute_data->opline;
tmpfile = fopen("/tmp/echo.test","a+");
fprintf(tmpfile,"Echo was called\n");
fclose(tmpfile);
return ZEND_USER_OPCODE_DISPATCH;
}
不管是不是变量,我们如何获取参数?
【问题讨论】:
-
看我的回答。虽然它应该可以工作,但我想知道你需要这个做什么?也许您采用了错误的方法,或者是解决错误问题的正确方法。
-
好吧,我们正在尝试在模块中实现某种污染,我们的方法如下(对于非常简单的污染) 1. 在执行开始时,获取 $_GET 的 zvals 地址元素 (DONE) 2. 在回显时,获取要回显的 zval 地址的地址,并检查它是否是 _GET zval 之一。 (未完成 - 回声挂钩)这看起来合法吗?
-
是的,正如您所说,对于非常简单的污染 - 我的解决方案应该有效。在我的(很少的)空闲时间里,我正在做一些相关的事情:一个扩展,它将为 php 脚本提供静态代码分析功能,这对你来说可能也很有趣。
-
听起来很有趣,它可以在任何地方使用吗?
-
当然,pecl.php.net/package/meta。它目前还没有做太多,但可能值得关注。
标签: php-internals