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

Dou*_*ith 3 c debugging stack gdb cpu-registers

我有一个作业,要求我找到主要的寄存器检查的返回值(我们正在学习gdb),我将如何去做呢?

Sec*_*att 6

一般来说,查看调用约定.

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

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

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

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

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