我正在开发一个php扩展并遇到问题。在我的扩展中,我定义了一个函数,该函数从用户空间解析参数并将它们传递给静态库中的另一个函数。
但是当我的函数结束时,会弹出以下错误: “无法访问地址0x5处的内存 分段错误(核心转储)“
我尝试使用gdb解决它并打印以下帧信息:
0x0852dbe3 in zend_do_fcall_common_helper_SPEC (
execute_data=<error reading variable: Cannot access memory at address 0xffffffc5>,
tsrm_ls=<error reading variable: Cannot access memory at address 0xffffffc1>) at /home/ted/php-5.5.6/Zend/zend_vm_execute.h:550
输入“info frame”命令后,会出现以下信息:
Stack level 0, frame at 0x9:
eip = 0x852dbe3 in zend_do_fcall_common_helper_SPEC
(/home/ted/php-5.5.6/Zend/zend_vm_execute.h:550); saved eip Cannot access memory at address 0x5
我已经坚持了一天..有人可以帮忙吗?
答案 0 :(得分:1)
我已经解决了这个问题..这是由一个我不太明白的错误(可能)引起的。在我的PHP代码中,我调用这样的函数:
$object->object_function($a,$b,$c,1);
在我的php扩展中,我解析了所有这些参数:
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sral",&string1,&strlen1,&resource,&array1 ,&intVal) == FAILURE)
问题是,我不能在PHP代码中使用1。相反,我应该使用:
$d = 1;
$object->object_function($a,$b,$c,$d);
我想这是因为我对php核心的理解不足。直接将1传递到扩展函数实际上不会给出我想要的值。