我对逆向工程和使用 Ghidra 很陌生。最近我反编译了一些arduino代码。当我查看反编译代码时,我注意到以下行。
iVar = (*DAT)(param_2,PTR_s);
我已经削减了变量的某些部分。但我真的很想知道这段代码在做什么。它应该是反编译的c代码。2 年前,我曾与 C 一起工作过,但我无法弄清楚这里发生了什么。PTR_s 应该是一个指向字符串的指针,而 param_2 是一个字节*。还没有弄清楚 *DAT 到底是什么。
我对逆向工程和使用 Ghidra 很陌生。最近我反编译了一些arduino代码。当我查看反编译代码时,我注意到以下行。
iVar = (*DAT)(param_2,PTR_s);
我已经削减了变量的某些部分。但我真的很想知道这段代码在做什么。它应该是反编译的c代码。2 年前,我曾与 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;
}
它打印 17 和 25 的总和,即输出为:
I got 42