2014-04-20 18 views
2

的使用檢查使用gdb 64bit顯存出界

char *addr = getenv("CNFG") 

我得到

0x7fffffffebea 

然後調試我的節目,我收到此錯誤信息:

(gdb) x/ls 0x7fffffffebea 
0x7fffffffebea: <Address 0x7fffffffebea out of bounds> 

如何檢查該環境變量的內容(爲了檢查是否有有效值)?

+1

您是複製/粘貼地址值,還是手動輸入地址值? 'p addr'是否也返回一個錯誤? – alk

+0

這是32位嗎? 64位?如果這是'addr'的值,它看起來像一個48位指針,這看起來有點奇怪。 –

+0

@ david.pfx:對於在64位平臺上運行的GDB,這是一種非常正常的顯示格式;內存地址實際上只有48位。 –

回答

0

我得到0x7fffffffebea

目前尚不清楚,從你的問題,但廣發銀行外運行程序時,你可能會得到該值。該值從運行到運行(由於地址空間佈局隨機化),應該在GDB內部得到不同的值(由於在GDB下運行時堆棧佈局的差異)。

換句話說,GDB,打印地址下運行該程序,然後使用x/s addr檢查字符串。

+0

謝謝。我首先禁用虛擬地址隨機化,以獲得始終相同的地址。我一定是睡着了...現在我得到一個有效的字符串:(gdb)x/1s 0x7fffffffebea 0x7fffffffebea:\t「RM = xterm」(CNFG的偏移量無關緊要,因爲我可以查找它) – Martin0x777