为什么我不能直接访问内存?

时间:2011-04-01 08:49:31

标签: gdb

(gdb) p it
$2 = (item *) 0x6
(gdb) p *it
$3 = {next = 0x0, prev = 0x0, h_next = 0x0, time = 0, exptime = 0, nbytes = 7, refcount = 1, nsuffix = 6 '\006', it_flags = 2 '\002', slabs_clsid = 1 '\001', nkey = 6 '\006', 
  end = 0x7f0890b6e040}
(gdb) p *0x6
Cannot access memory at address 0x6

这里不是p *itp *0x6相同吗?

2 个答案:

答案 0 :(得分:1)

除非您在具有映射到地址0的实内存的嵌入式目标上,否则it == 0x6的值为 bogus (通常是空指针的结果)解除引用)。

gdb打印*it这一事实可能意味着gdb中存在错误,但很难说。不幸的是,您没有说明您正在使用哪个版本的GDB以及哪个操作系统。

答案 1 :(得分:0)

gdb'p'命令只能用于打印变量值。 如果要检查内存,请查看there