char *addr = getenv("CNFG")
我得到
0x7fffffffebea
然後調試我的節目,我收到此錯誤信息:
(gdb) x/ls 0x7fffffffebea
0x7fffffffebea: <Address 0x7fffffffebea out of bounds>
如何檢查該環境變量的內容(爲了檢查是否有有效值)?
char *addr = getenv("CNFG")
我得到
0x7fffffffebea
然後調試我的節目,我收到此錯誤信息:
(gdb) x/ls 0x7fffffffebea
0x7fffffffebea: <Address 0x7fffffffebea out of bounds>
如何檢查該環境變量的內容(爲了檢查是否有有效值)?
我得到
0x7fffffffebea
目前尚不清楚,從你的問題,但廣發銀行外運行程序時,你可能會得到該值。該值從運行到運行(由於地址空間佈局隨機化),和應該在GDB內部得到不同的值(由於在GDB下運行時堆棧佈局的差異)。
換句話說,GDB,打印地址下運行該程序,然後使用到x/s addr
檢查字符串。
謝謝。我首先禁用虛擬地址隨機化,以獲得始終相同的地址。我一定是睡着了...現在我得到一個有效的字符串:(gdb)x/1s 0x7fffffffebea 0x7fffffffebea:\t「RM = xterm」(CNFG的偏移量無關緊要,因爲我可以查找它) – Martin0x777
您是複製/粘貼地址值,還是手動輸入地址值? 'p addr'是否也返回一個錯誤? – alk
這是32位嗎? 64位?如果這是'addr'的值,它看起來像一個48位指針,這看起來有點奇怪。 –
@ david.pfx:對於在64位平臺上運行的GDB,這是一種非常正常的顯示格式;內存地址實際上只有48位。 –