Skip to content

How to acceess sapi_request_info during profiling? #403

@lighthuter

Description

@lighthuter

I want to access request query params during profiling to implement trigger functionality similar to the xDebug one. I'm trying to access sapi_request_info.query_string to do this. I tried to create new "intptr_t" and "char" types and combine them with Pointer::indexedAt(), but as a result I get some random characters

Example

$zend_type_reader = $this->getTypeReader($php_version);
        [$offset, $size] = $zend_type_reader->getOffsetAndSizeOfMember(
            'sapi_request_info',
            'query_string'
        );

        $pointer = new Pointer(
            RawPointer::class, // intptr_t
            $sg_address + $offset,
            $size // 8
        );

        $charPtr = $dereferencer->deref($pointer)->value;

        $pointer = new Pointer(
            RawPointer::class,
            $sg_address + $offset,
            $size // 8
        );

        $charPtr = $dereferencer->deref($pointer)->value;

        $pointer = new Pointer(
            Char::class, // char
            (int) $charPtr,
            $size // 4
        );

        $firstChar = $dereferencer->deref($pointer)->value; // some random character

Is it possible to do something like this?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions