如果我有一个C函数并且我用gdb调试它,我如何找到函数的返回值?

时间:2013-04-01 01:53:44

标签: c debugging gdb stack cpu-registers

我有一个作业,要求我通过寄存器检查找到main的返回值(我们正在学习gdb),我该怎么做呢?

1 个答案:

答案 0 :(得分:6)

一般来说,请查看调用约定。

在x86中,所有调用约定在EAX上返回小整数结果,在EDX上返回大(64位)结果:EAX(EDX保持较高位),浮点结果为FP0。

在x64中,RAX返回小整数结果,浮点结果为FP0。

在ARM(包括拇指模式)中,整数结果在R0中返回。

如果你想弄清断断点的位置,我的建议是在 main 函数的开头加一个断点。如果这样做,返回地址(即 main 将在完成执行后返回的位置)将是堆栈顶部的值。如果你在那里放置一个断点,那么在 main 函数执行完毕后你就会中断。

由于 main 的返回类型为 int ,您可以查看EAX(或RAX或R0)以查看 main 返回的值