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位。 –