堆栈问题

时间:2010-11-11 07:16:44

标签: c++ c gcc stack

我有一个使用gcc 3.44编译的工作程序但是当我使用4.44再次编译它时出现了问题。函数中的某些局部变量似乎被未知修改,因此for循环不会终止,因为其条件中的变量即使递增也会不断变为0。在循环下调用函数似乎没问题,因为它返回到正确的地址。我试着跟踪循环受影响的变量的值,我发现在if分支下调用print函数后修改了值,删除或添加了更多的print调用解决了它,但我认为它与之无关print函数,除了循环中的增量外,没有修改该变量的代码。我也尝试在循环的开头和结尾跟踪esp,它是一样的。什么可能导致这个问题?

2 个答案:

答案 0 :(得分:1)

你说你要从GCC v3.44(代码工作的地方)到v4.44代码被破坏。

确保程序的所有其他部分(所有源文件和库文件)也使用GCC v4.44进行编译。你正在调用打印函数,所以我猜你是指glibc中的标准printf函数。因此,请确保glibc也是在v4.44下编译的。

答案 1 :(得分:0)

如果这对您的打印功能确实存在问题,那么您是否可能使用可变参数列表的某些参数来破坏堆栈?也许假设你有一个标准数据类型或枚举常量不再存在?这些是您自己的打印功能吗?然后尝试使用gcc的__attribute__扩展名进行编译时类型检查。