当我使用以下命令时:
print/x &_start -> I get: 0x08049054 print/x &_key -> I get: 0x0804916d
很容易计算出差异是: 119h
但如果我使用以下命令:
print/x &_key-&_start -> I get: 0x46 (!!)
为什么?如果调试自己的程序,有人会确认这一点吗?
发布于 2011-02-24 22:28:37
你看到的是指针算法。
发布于 2011-02-24 22:20:53
这是因为您使用了指向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);
}现在生成文件(GNUmakefile):
CXXFLAGS=-ggdb -g3 -O0
foo: foo.cpp通过调用make (准确地说,是GNU make )来构建它。
输出将为:
start(0x8049054), key(0x804916d) -> [key - start](70)..。和70 == 0x46。
https://stackoverflow.com/questions/5103821
复制相似问题