我在gdb会话中启动了Apache http服务器(版本2.4.12)。我正在逐步执行request.c模块中的代码,并打印出变量的内容
这是代码
1546 AP_DECLARE(int) ap_file_walk(request_rec *r)
1547 {
1548 ap_conf_vector_t *now_merged = NULL;
1549 core_dir_config *dconf = ap_get_core_module_config(r->per_dir_config);
1550 ap_conf_vector_t **sec_ent = NULL;
1551 int num_sec = 0;
这是我感兴趣的* r的输出:
used_path_info = 2,
eos_sent = 0,
per_dir_config = 0x7fffe4251028,
request_config = 0x7fffe4258370,
log = 0x7ffff7fc1288,
log_id = 0x0,
这是我在检查per_dir_config
时得到的结果(gdb) print 0x7fffe4251028
$99 = 140737021022248
(gdb) x/s 0x7fffe4251028
0x7fffe4251028: "\370\022%\344\377\177"
(gdb)
有人有时间向我解释"\370\022%\344\377\177"
是什么吗?
答案 0 :(得分:0)
当字符不可打印时,此字符串"\370\022%\344\377\177"
是以八进制形式由r-> per_dir_config指向的core_dir_config结构的开头。在十六进制中,您将拥有:
\370 = 11 111 000 = f8
\022 = 00 010 010 = 12
% = (ascii value) = 25
\344 = 11 100 100 = e4
\377 = 11 111 111 = ff
\177 = 01 111 111 = 7f
根据其他指针的值,我猜你的计算机有一个小端处理器,所以你必须反转字节顺序。那么价值是:
0x7fffe42512f8
它是r-> per_dir_config指向的core_dir_config结构的d字段的值。
由于d是char *,因此您可以键入x/s 0x7fffe42512f8
来查看字符串。