How do I find the address of argc in the frame?
我试图在C ++程序中查找段错误。 我注意到segfault时argc已被修改为很多。 该数字恰好是我应用程序地址空间中的一个地址。 这使我相信某些东西正在破坏我的主堆栈框架。 问题是,如何获得指向argc的堆栈上的地址,以便我可以知道哪种方法正在修改程序中的参数? 我想单步执行程序,并观察该地址空间的变化。
此段错误发生在hpux和aix上(现在我正在查看hpux)。 我一直在浏览堆栈,但是找不到将argc变量压入堆栈的任何位置。
我正在使用gdb进行调试。
有人知道argux风险计算机的堆栈框架中将argc存储在何处吗?
-
我期望变量位于堆栈的底部附近,但是我在那里看不到它。
-
在main的开头附近放置一个断点,调试器应该能够为您提供地址(一个好的调试器也可以让您观察内存位置)。
-
如果可以调试并且调试器完全没有任何意义,则应在argc的地址上建立写中断功能,堆栈转储应在程序启动时告诉您。当所有其他操作均失败时,在p中的任何地址上设置bow-bp。然后让它运行,当它被覆盖时,您会立即被告知。
-
我正在寻找的是:stackoverflow.com/questions/6511560/
-
gdb监视将起作用,除了我离开main方法后它将立即失效。因此,我仍然需要知道argc所在的地址。 gdb不会告诉我argc的地址,只会告诉我它的值。
-
如果您告诉地址,gdb会告诉您地址,当您在main()中执行p &argc
-
不用了显然,hpux pa-risc将argc存储在寄存器中,而不是存储在内存中(当我执行p&argc时,gdb会通知我)。
-
所以,我想我在吠错树。 argc只是因为hpux pa-risc因为未使用而重新分配了该寄存器,所以才进行了更改。在linux上,argc存储在堆栈中(我刚刚检查过)。
-
@David:将其发布为答案,并作弊投票。
-
@LThode你去了。
显然,hpux pa-risc将argc存储在寄存器中,而不是存储在内存中(当我执行p&argc时,gdb会通知我)。 argc只是因为hpux pa-risc未使用而重新分配了该寄存器,所以才进行了更改。 在linux上,argc存储在堆栈中。