PHP Shared Memory Debugger

This utility allows you to see the contents of a shared memory segment created using the shm_* functions in PHP. Unlike the shmop functions, which allow you to read and write raw data in a shared memory segment, these are designed for PHP only and consist of serialized PHP variables in a linked list.

As there is no way to enumerate the values in a shared memory segment, this utility uses the shmop functions to read the segment raw, and then parses the data according to the sysvshm_chunk_head and sysvshm_chunk PHP-internal structures.

Usage


Usage: getshm [-v]
-v verbose information (byte pointers, etc)
shared memory key passed to shm_attach()

-v gives you all the pointers and lengths from the raw shared memory segment.

Note you will need read access to the segment; the mode used to create the segment will affect your ability to read the segment if are not the user who created the segment.

Example


david@a6s:~# getshm 0x00120003
shm key 0x00120003 (1179651):

Variable:
Key: 0
Data:
string(2) "aq"

Variable:
Key: 1
Data:
int(201577)


david@a6s:~# getshm -v 0x00120003
shm key 0x00120003 (1179651):
segment size: 500

Header:
Magic: "PHP_SM"
Data Start: 24
Data End: 80
Bytes Free: 420
Bytes Total: 500

Variable:
Key: 0
Length: 9
Next: 28
Raw Data: "s:2:"aq";"
Unserialized data:
string(2) "aq"

Variable:
Key: 1
Length: 9
Next: 28
Raw Data: "i:201579;"
Unserialized data:
int(201579)

Compatibility

The sysvshm_ structures may change in a future version of PHP and cause this utility to break.

This is designed to read shm_* format segments only and will throw errors on other types of segment including raw shmop_* segments.