Я разрабатываю расширение 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
Я застрял в этом на один день. Может ли кто-нибудь помочь?
Я решил эту проблему. Это вызвано ошибкой (возможно), которую я не совсем понимаю. В моем 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)
Проблема в том, что я не могу использовать 1 в php-коде. Вместо этого я должен использовать:
$d = 1;
$object->object_function($a,$b,$c,$d);
Полагаю, это из-за моего плохого понимания ядра php. Непосредственная передача 1 в функцию расширения фактически не даст значения, которое я хочу.