【问题标题】:Obtaining called functions' return values from a core dump从核心转储中获取被调用函数的返回值
【发布时间】:2018-10-12 22:53:18
【问题描述】:

如果我有,例如:

#include <stdlib.h>
int f(void) { return 42; }
int g(void) { return 43; }
int main()
{
    if(f()!=g())
        abort();
}

是否可以从核心转储中获取f()g() 的返回值,而无需原始代码将它们分配给变量? (int lhs, rhs; if((lhs=f())!=(rhs=g())) abort();)

【问题讨论】:

  • 你需要时间旅行来完成这项工作。

标签: c gcc gdb


【解决方案1】:

不——即使没有内联,比较也可能编译为减法,然后进行零测试,这样在转储时至少一个返回值不再存在(在寄存器或内存中) .

通过优化,即使将值存储在变量中也无济于事:它肯定会消除死存储。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 2014-05-28
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 2021-10-29
    相关资源
    最近更新 更多