GDB算术

时间:2011-02-24 11:10:22

标签: gdb

当我使用命令时:

print / x& _start - >我得到:0x08049054 print / x& _key - >我得到:0x0804916d

很容易弄清楚差异是:119h

但如果我使用命令:

print / x& _key-& _start - >我得到:0x46(!!)

为什么呢?如果调试他自己的程序,有没有人确认这个?

2 个答案:

答案 0 :(得分:1)

这是因为您使用指向unsigned int或其他类型(对于_start_key)的指针,这是四个字节宽。您会注意到,即使使用C / C ++中的指针算术,您也会得到相同的结果。

将此内容写入foo.cpp

#include <cstdio>

int main(int argc, char** argv)
{
  unsigned int* _start = (unsigned int*)0x08049054, * _key = (unsigned int*)0x0804916d;
  printf("start(%p), key(%p) -> [key - start](%li)\n", _start, _key, _key - _start);
}

现在make文件(GNUmakefile):

CXXFLAGS=-ggdb -g3 -O0

foo: foo.cpp

通过调用make(确切地说是GNU make)来构建它。

输出将是:

start(0x8049054), key(0x804916d) -> [key - start](70)

...和70 == 0x46

答案 1 :(得分:1)

你看到的是指针算术。

另请参阅:SO:Pointer Arithmetic