c++ - 我如何在框架中找到 argc 的地址?

标签 c++ unix segmentation-fault callstack

我正在尝试查找 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/

相关文章:

c++ - 在 QTableView 中跨越两列的标题

c++ - 如何专门化模板类中的赋值运算符?

bash - 搜索文件,显示匹配项和第一行

c - 我无法理解这个段错误

c - 段错误 11 - 网络程序

c - 在编译时检测段错误

c++ std::string.find 在 boolean 表达式中返回意外结果

c++ - 给出正确的输出后给出错误段错误(核心转储)

c++ - 确定 c/c++ 代码中内存泄漏的工具

c - 如何强制 Inline::C 链接到旧库?