我正在尝试查找 C++ 程序中的段错误。我注意到在发生段错误时 argc 已被修改为非常大的数字。该数字恰好是我的应用程序地址空间中的一个地址。这让我相信有什么东西正在破坏我的主堆栈框架。问题是,如何获取指向 argc 的堆栈地址,以便我可以知道是什么方法修改了我程序中的参数?我想单步执行程序并观察地址空间的变化。 这个段错误发生在 hpux 和 aix 上(现在我正在查看 hpux)。我一直在查看堆栈,但找不到将我的 argc 变量插入堆栈的任何位置。 我正在使用 gdb 进行调试。
有谁知道 argc 将存储在 hpux pa-risc 机器的堆栈框架中的什么位置?
最佳答案
显然 hpux pa-risc 将 argc 存储在寄存器中,而不是内存中(当我执行 p &argc 时 gdb 告诉我)。 argc 只改变了,因为 hpux pa-risc 重新分配了寄存器,因为它没有被使用。在 Linux 上,argc 存储在堆栈中。
关于c++ - 我如何在框架中找到 argc 的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21321601/