是否有一些Linux或gcc的特殊(内存)地址列表

Is there some kind of list with special (memory) addresses for Linux or gcc?

本文关键字:内存 列表 地址 Linux gcc 是否      更新时间:2023-10-16

我听说有一些特殊的地址(或者,至少,一些特殊地址的范围),从Linux使用(或gcc,我不知道,这是问题的一部分),但我找不到这样的。我甚至不知道怎么去找。

(例如,在Visual Studio中,对于未初始化的变量有这样的东西)

这个问题是由一个更具体的问题"引入"的(它不应该是一个单独的问题,这就是我在这里问它的原因):0x30303030是一个特殊的地址还是什么?

因为我有一个像

#0 0x003fa527 in memset () from/lib/tls/lib .so.6#1 0x4e5fffa0 in ??()#2 0x00787d13 in std::num_put>>::_M_group_int () from/usr/lib/libstdc++.so.6#3 0x0079a1e4中的std::operator, std::allocator> () from/usr/lib/libstdc++.so.6#4 0x30303030 in ??()#5 0x30303030 in ??()…#1483 0x30303030 in ??()#1484 0x30303030 in ??()无法访问地址0xb3927000的内存

这里有1400多行像0x30303030 in ?? ()

这意味着什么,或者它只是一个随机的内存地址,它看起来像一个无底递归?问题是,我无法复制它,所以调试或使用valgrind变得无用:

我知道,这是一个没有任何有用信息的可怕问题,但我决定试一试。

在ASCII中,它是"0000",所以可能有些东西被溢出了。或者某个地方有内存错误

它通常被调试器用来标记未初始化的指针。地址本身是无关的,在任何方面都不特殊。这样的事情在GCC中可能不存在,这取决于他们选择如何编写他们的调试器。

在回溯的顶部看到memset,很有可能它没有设置您所期望的确切内存区域。也许设置为"0"有点太多了?