这个函数的返回值可以用静态分析确定吗?

逆向工程 部件
2021-06-26 13:55:36

我有一个作业,我试着解决它。但是,尽管仔细检查了所有内容并投入了多个小时,但我似乎无法解决它。

我的任务是将以下函数反向工程为高级 C 代码并确定 f(1,2,3) 的返回值 在此处输入图片说明

这是我的方法 在此处输入图片说明

问题 f(1,2,3) 无法确定,因为 f 中的第 6 行导致跳转到loc_56C,其中 g(2,3) 被调用。在第 14 行中使用了 [ebp+Ch],但是只为 b(8 字节)提供了 2 个参数,这意味着我们不知道该内存位置(基指针上方 12 字节)上的内容。结果无法确定返回值

f(1,2,3) 是真的不能确定吗?

1个回答

上述程序的控制流程如下 main -> f -> g -> f -> main

mainf用 1,2,3调用

堆栈----
3
2
1
ret
ebp

注意推送指令和调用约定。f检查是否 1 == 0 (ebp - 8)。答案是不。因此,它调用 g。这是给你的主要提示。我相信你将能够弄清楚其余部分:-)