2017-08-31 98 views
0

我经常在网上看到的,当话题被逆转,就是这个语法逆向工程暧昧语法

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

我觉得这个代码是从IDA插件(右?),但我不明白..有人可以解释我一点点,或指示某些地方研究这种代码性质?

Thanxs预先=)

+0

你对这段代码不了解么?你懂C吗?你熟悉指针吗? – YSK

+0

是的,我的意思是我看不到指针和铸造..但是,例如,[a1 + 6]是什么意思? a1 + 6职位?成数组? – Kiks777

回答

2

此代码副本的地址2个字节指向a2 + 2到地址由a1 + 6指向。

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

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

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

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

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

我建议你也看看汇编代码,你将看到构成这个任务的步骤。如果你没有它,那么只需自己编写一个C程序来完成这种操作,然后对其进行反编译。

+0

Thanxs的解释,这就是我需要的! – Kiks777

+0

只是一件事...所以a1可以被看作是一个指针数组(或者只是一个数组中的值)?或者它可以是一个正常的变量? – Kiks777

+0

'a1'是指向某物的指针。这是我们唯一可以学习的东西。它可以是一个数组,但它也可以是一个指向结构体的指针。代码可能会将一个字段从一个结构复制到另一个结构,或者从一个数组复制到一个结构,或者从一个结构复制到一个数组。您无法从这一行代码中看出来,实际上可以考虑一个数组作为结构的一种类型。随着更多的代码反向工程,您可以获得更多的关于如何使用a1的提示,以便您可以了解其中的内容。 – YSK