2014-04-20 17 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