【发布时间】:2015-03-10 08:29:24
【问题描述】:
我想构建一个 PHP 扩展,它可以动态检查从 PHP 文件生成的每个操作码并对其进行一些检查。
我遇到了几个网站,发现了几个像zend_set_user_opcode_handler 这样的函数,但我不明白如何使用这个函数来获得像ASSIGN !0, 50 这样的完整操作码。
我知道像 php -d vld.active=1 -d vld.execute=0 -f [filename].php 这样的命令可以用来生成 PHP 操作码,但据我所知,您只能在 PHP 程序终止后访问操作码。
我想从扩展中得到一个操作码,它是在函数执行时一个接一个(动态地)获得的。
有人可以帮我解决这个问题吗?
【问题讨论】:
-
我希望 xdebug 会做类似的事情,你能看看代码吗?
-
生成操作码相当困难,因为这样做的所有东西都标记为
static,并且只能在zend_compile.c中使用,所以你必须复制它。 -
可能有更多的外观来构建一个 AST。
-
不确定我完全理解你想要什么,但如果你想在操作码级别逐步执行代码(并显示执行的操作码),那么 phpdbg 支持。
-
检查this out,应该有帮助
标签: php zend-framework php-extension php-internals