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

标签 c debugging gdb stack cpu-registers

我的作业要求我通过寄存器检查找到 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/

相关文章:

python - pyenv环境下如何搭建gdb

c - C-使用read()和write()从一个文件复制到另一个文件,而不使用文件功能

编译差异: Windows vs. Linux

c - puts 是可重入的吗?

c - malloc 失败并返回 NULL

debugging - 如何解释WinDbg中显示的异常代码?

php - 是否可以将调试器附加到正在运行的 PHP 进程?

javascript - 使用 modernizr 在 ie 中测试指针事件

c - 段错误 - 调试程序集 gdb

无法插入断点。低值地址