2015-02-24 59 views
0

我在gdb会话中启动了Apache http server(版本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) 

会这样meone有时间向我解释"\370\022%\344\377\177"是什么?

+1

'r-> per_dir_config'是指向'ap_conf_vector_t'结构的指针。你得到的字符串是内容(部分,也许)。 – 2015-02-24 20:04:16

+0

它是一个由7个字符组成的序列,其中包括''\ 370',''\ 022','''',''\ 344',''\ 377',''\ 177 '',''\ 0''(终止的空字符是隐含的)。 GDB主要以八进制格式向你展示它们。这是最好的GDB能够做到的:当你通过地址直接访问内存时,它对数据类型一无所知。 – 2015-02-24 22:48:30

+0

为什么不直接使用print r-> per_dir_config? – dbrank0 2015-02-25 07:48:21

回答

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来查看字符串。

相关问题