我正在尝试在c ++程序中追踪段错误。我注意到在段错误时argc已被修改为非常大的数字。该号码恰好是我的应用程序的地址空间中的地址。这让我相信有些东西正在腐蚀我的主堆栈框架。问题是,如何获得指向argc的堆栈上的地址,以便我可以告诉我在程序中修改参数的方法是什么?我想逐步完成该程序并观察该地址空间的变化。 这个段错误发生在hpux和aix上(现在我正在看hpux)。我一直在查看堆栈,但我找不到我的argc变量被推到堆栈的任何地方。 我正在使用gdb进行调试。
有谁知道argc将存储在hpux pa-risc机器的堆栈帧中的哪个位置?
答案 0 :(得分:1)
显然hpux pa-risc将argc存储在寄存器中,而不是存储器中(当我执行p& argc时gdb通知我)。 argc只是改变了因为hpux pa-risc重新分配了寄存器,因为它没有被使用。在linux上,argc存储在堆栈中。