2011-02-24 54 views
1

當我使用命令:GDB算術

打印/ X & _start - >我得到:0x08049054 打印/ X & _key - >我得到:0x0804916d

這是很容易弄清楚,所不同的是:119H

但是,如果我使用命令:

打印/ X & _key- & _start - >我得到:0×46(!!)

爲什麼?有沒有人確認,如果調試他自己的程序?

回答

1

這是因爲您使用的指針爲unsigned int或其他類型(對於_start_key),其寬度爲4個字節。你會注意到,即使在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做,要準確)。

輸出將是:

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

...和70 == 0x46