我有一个作业,要求我通过寄存器检查找到main的返回值(我们正在学习gdb),我该怎么做呢?
答案 0 :(得分:6)
一般来说,请查看调用约定。
在x86中,所有调用约定在EAX上返回小整数结果,在EDX上返回大(64位)结果:EAX(EDX保持较高位),浮点结果为FP0。
在x64中,RAX返回小整数结果,浮点结果为FP0。
在ARM(包括拇指模式)中,整数结果在R0中返回。
如果你想弄清断断点的位置,我的建议是在 main 函数的开头加一个断点。如果这样做,返回地址(即 main 将在完成执行后返回的位置)将是堆栈顶部的值。如果你在那里放置一个断点,那么在 main 函数执行完毕后你就会中断。
由于 main 的返回类型为 int ,您可以查看EAX(或RAX或R0)以查看 main 返回的值