我的作业要求我通过寄存器检查找到 main 的返回值(我们正在学习 gdb),我该怎么做?
最佳答案
一般来说,看一下调用约定。
在 x86 中,所有调用约定在 EAX 上返回小整数结果,在 EDX:EAX 上返回大(64 位)结果(EDX 持有较高位),在 FP0 上返回 float 结果。
在 x64 中,小整数结果在 RAX 上返回, float 结果在 FP0 上。
在 ARM(包括拇指模式)中,整数结果在 R0 中返回。
如果您正在尝试确定将断点放在哪里,我的建议是在 main 函数的开头放置一个断点。如果这样做,返回地址(即 main 完成执行后将返回的位置)将是堆栈顶部的值。如果您在此处放置一个断点,您将在 main 函数完成执行后立即中断。
由于 main 的返回类型为 int,您可以查看 EAX(或 RAX 或 R0)以了解 main 返回的值.
关于c - 如果我有一个 C 函数并且我正在使用 gdb 调试它,我如何找到函数的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15736639/