【问题标题】:What does this C syntax do: iVar = (*DAT)(param_2,PTR_s);这个 C 语法有什么作用: iVar = (*DAT)(param_2,PTR_s);
【发布时间】:2021-06-04 19:46:43
【问题描述】:

我对逆向工程和使用 Ghidra 很陌生。最近我反编译了一些arduino代码。当我查看反编译的代码时,我注意到以下行。

iVar = (*DAT)(param_2,PTR_s);

我已经删除了变量的某些部分。但我真的很想知道这段代码在做什么。它应该是反编译的c代码。 2 年前,我曾与 C 一起工作过,但我无法弄清楚这里发生了什么。 PTR_s 应该是一个指向字符串的指针,而 param_2 是一个字节*。还没有弄清楚 *DAT 到底是什么。

【问题讨论】:

  • DAT 可能是指向此处调用的函数的指针。
  • 它是对几个函数的引用,这让我理解起来很奇怪
  • 好吧,我们没有看到定义。你会的。
  • 谢谢我现在理解语法了。 *DAT 是函数指针,第二个括号中的两个值是函数的参数。

标签: c decompiling ghidra


【解决方案1】:

DAT 是一个指向函数的指针,该函数被(不必要地)引用,然后使用两个参数param_2PTR_s 调用。然后将返回值存储在变量iVar中。

这是一个非常简短且相当愚蠢的示例程序,其中出现了上述语句:

#include <stdio.h>

static int add(int x, int y)
{
    return x + y;
}

int main(void)
{
    int (*DAT)(int, int) = add;
    const int param_2 = 17;
    const int PTR_s = 25;
    const int iVar = (*DAT)(param_2, PTR_s);
    printf("I got %d\n", iVar);
    return 0;
}

它打印 17 和 25 的总和,即输出为:

I got 42

【讨论】:

  • DAT 可能是指向函数指针的指针,在这种情况下取​​消引用是合理的吗?
  • @EugeneSh。当然,这是真的。好点,我猜,如果没有进一步的上下文就不可能说出来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-19
  • 2019-07-18
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 2012-04-02
相关资源
最近更新 更多