Как получить функцию args, когда я подключил ее в расширении php7.0 - PullRequest
0 голосов
/ 14 мая 2018

Я пытался написать расширение php, чтобы получить аргументы функции. <?php system('ls');?> В этом примере это «ls». Я подключил эту функцию с помощью zend_set_user_opcode_handler, и коды функций:

PHP_MINIT_FUNCTION(hello)
{   
    zend_set_user_opcode_handler(ZEND_DO_ICALL, do_fcall_handle);
    return SUCCESS;
}

static int do_fcall_handle(ZEND_OPCODE_HANDLER_ARGS){

return ZEND_USER_OPCODE_DISPATCH;
}

Версия PHP - 7.2.5.

1 Ответ

0 голосов
/ 15 мая 2018

В php7 используйте EG (current_execute_data) -> call, чтобы получить имя и значение arg.

static int do_fcall_handle(ZEND_OPCODE_HANDLER_ARGS){

    zend_string *funcName = EG(current_execute_data)->call->func->common.function_name;
    php_printf("[!] Hooked `%s`, ",ZSTR_VAL(funcName));

    int arg_count = EG(current_execute_data)->call->This.u2.num_args;
    for(int i=0; i<arg_count; i++){
        php_printf("arg%d is `%s`, ", i+1, ZSTR_VAL((EG(vm_stack_top)-(i+1))->value.str) ); 
    }
    php_printf("HOOK end;\n");
    return ZEND_USER_OPCODE_DISPATCH;
}
...