微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决这个 C 语法有什么作用: iVar = (*DAT)(param_2,PTR_s);

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

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

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

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。