逆向工程歧义语法

Reverse engineering ambiguous syntax

我经常在网上看到的,话题反转的时候,是不是这个语法

  *(_WORD *)(a1 + 6) = *(_WORD *)(a2 + 2);

我认为这段代码来自 IDA 插件(对吗?),但我无法理解它..有人可以稍微解释一下,或者指出在哪里可以研究这段代码的性质吗?

提前致谢 =)

此代码从 a2 + 2 指向的地址复制 2 个字节到 a1 + 6 指向的地址。

更详细地说,代码执行以下操作:

  • a2.
  • 前进 2 个字节
  • 将结果视为 WORD 指针,即指向由两个字节组成的值的指针。这是右边的(_WORD *)部分。
  • 读取上面指针引用的2个字节。这是右边表达式最左边的*

我们现在有一个 16 位的值。现在我们:

  • a1.
  • 前进 6 个字节
  • 将结果视为 WORD 指针。同样,这是 (_WORD *) 部分。
  • 将我们在第一部分中读取的2个字节写入我们拥有的指针所指向的地址。

如果您以前从未见过这样的代码,您可能会认为在表达式两边使用 (_WORD*) 是多余的 - 但事实并非如此。例如,我们可以读取一个 16 位值并将其写入一个指向 32 位值的指针(例如,通过对其进行符号扩展)。

我建议您也查看汇编代码,您将在其中看到构成此作业的步骤。如果你没有它,那就自己写一个 C 程序来做这样的操作,然后反编译它。