微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 zend_compile.c 调用 PHP 函数?

如何解决如何从 zend_compile.c 调用 PHP 函数?

每次以 segmentation faultFatal error 结束时,我都不知道如何调用现有的 PHP 函数。 免责声明:我在底层编程方面完全没有经验,只是在学习和尝试。

我尝试了不同的方法,例如 PHPinfo()

/* zend_compile.c (in a custom function that works well without the code below) */
zend_string *func_name;
zend_ast *func_name_ast,*args_ast_list,*arg_ast;
zend_ast_list *args_list;
znode func_name_node,arg_node;

func_name = zend_string_init("PHPinfo",sizeof("PHPinfo"),0);
func_name_ast = zend_ast_create_zval_from_str(func_name);
zend_compile_expr(&func_name_node,func_name_ast);

arg_ast = zend_ast_create_zval_from_long(0);
zend_compile_expr(&arg_node,arg_ast);

args_ast_list = zend_ast_create_list(2,ZEND_AST_ARG_LIST,func_name_ast,arg_ast);
args_list = zend_ast_get_list(args_ast_list);

zend_compile_func_cuf(NULL,args_list,func_name);

结果:Fatal error: Uncaught TypeError: PHPinfo(): Argument #1 ($function) must be a valid callback,function "PHPinfo" not found or invalid function name

同样尝试在哈希表中查找函数失败:

zend_string *func_name,*lcname;
zval *name;
zend_function *fbc;

func_name = zend_string_init("PHPinfo",func_name_ast);

name = &func_name_node.u.constant;
lcname = zend_string_tolower(Z_STR_P(name));
fbc = zend_hash_find_ptr(&CG(function_table),lcname);

结果:segmentation fault

我也尝试过 call_user_function 像这个例子 https://stackoverflow.com/a/13593387/1159013 但它也导致了 segmentation fault

单独调用每个操作码也会导致上述错误

如何从 zend_compile.c 调用 PHP 函数

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。