这个C语法做什么:iVar=(*DAT)(param_2,PTR_s);

这个C语法做什么:iVar=(*DAT)(param_2,PTR_s);,c,decompiling,ghidra,C,Decompiling,Ghidra,我对逆向工程和使用Ghidra是个新手。最近我反编译了一些arduino代码。当我查看反编译的代码时,我注意到下面这行代码 iVar = (*DAT)(param_2,PTR_s); 我已经切掉了变量的一些部分。但我真的很想知道这段代码在做什么。它应该是反编译的c代码。两年前,我曾在C工作过一段时间,但我不知道这里发生了什么。PTR_s应该是指向字符串的指针,param_2是字节*。没有弄清楚*DAT到底是什么。DAT是指向函数的指针,该函数被(不必要地)延迟,然后用两个参数param_2和P

我对逆向工程和使用Ghidra是个新手。最近我反编译了一些arduino代码。当我查看反编译的代码时,我注意到下面这行代码

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

我已经切掉了变量的一些部分。但我真的很想知道这段代码在做什么。它应该是反编译的c代码。两年前,我曾在C工作过一段时间,但我不知道这里发生了什么。PTR_s应该是指向字符串的指针,param_2是字节*。没有弄清楚*DAT到底是什么。

DAT
是指向函数的指针,该函数被(不必要地)延迟,然后用两个参数
param_2
PTR_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;
}

DAT
可能是指向此处调用的函数的指针。它是对几个函数的引用,这让我理解起来很奇怪。好吧,我们没有看到定义。是的。一些阅读啊,谢谢。我现在明白语法了*DAT是函数指针,第二个括号中的两个值是函数的参数。
DAT
可以是指向函数指针的指针,在这种情况下,解引用是正确的?@EugeneSh。当然,这是真的。我想这是一个很好的观点,如果没有进一步的背景,是不可能说出来的。
I got 42