逆向工程模糊语法

时间:2017-08-31 00:47:12

标签: reverse-engineering ida reversing

我经常在网上看到,当主题正在颠倒时,就是这种语法

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

我认为这段代码来自IDA插件(对吧?),但是我无法理解..有人可以解释一下,或者说明在哪里研究这段代码性质?

提前Thanxs =)

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

我建议您也查看汇编代码,您将在其中看到构成此分配的步骤。如果你没有它可用,那么只需自己编写一个C程序进行这样的操作,然后对其进行反编译。