3

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

4

1 回答 1

6

通常,请查看调用约定。

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

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

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

如果你想弄清楚在哪里放置断点,我的建议是在main函数的开头放置一个断点。如果这样做,返回地址(即main执行完毕后将返回的地址)将是堆栈顶部的值。如果您在此处设置断点,您将在main函数完成执行后立即中断。

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

于 2013-04-01T01:55:33.980 回答