当我使用命令时:
print / x& _start - >我得到:0x08049054 print / x& _key - >我得到:0x0804916d
很容易弄清楚差异是:119h
但如果我使用命令:
print / x& _key-& _start - >我得到:0x46(!!)
为什么呢?如果调试他自己的程序,有没有人确认这个?
答案 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)
你看到的是指针算术。