1

有这个 Ghidra 反编译的 C 代码。

我知道 local_60 是一个四字,但我不明白索引它

local_60._3_1_这里指的是什么?

  local_60 = 0x6c46575935676a5a;
  local_28 = 0x7945474e3563544f;
  printf("Enter access code: ");
  __isoc99_scanf(&DAT_0010201c,&DAT_001040c0);
  if ((((DAT_001040c0 == 'f') && (DAT_001040c1 == 'b')) && (DAT_001040c2 == local_60._3_1_)) &&
     ((DAT_001040c3 == '6' && (DAT_001040c4 == local_28._2_1_)))) {
4

1 回答 1

3

您通常可以单击反编译的 C 代码部分并突出显示原始程序集的哪个部分产生了它,这可以帮助您理解 _3_1_ 和 _2_1_ 的 ghidra 含义。

根据我的经验,_X_Y_ 语法通常意味着代码尝试通过考虑 8 中的单个字节的值来尝试“索引”到像数组一样的整数中。除此之外,如果您检查两个常量的字节值0x6c46575935676a5a0x7945474e3563544f您可能会注意到所有字节都是正确的 ASCII 字符。这两件事表明 local_60 和 local_28 应该代替char[8]整数。您应该能够右键单击变量声明并手动更改其类型,这可以通过将语法更改为数组索引和数组初始化来使代码更具可读性。

于 2021-08-18T09:29:49.527 回答