这些说明是什么意思?

时间:2014-10-29 09:41:32

标签: assembly reverse-engineering ida

在过去的两个月里,我学习了基本的逆向工程,装配和C.我从朋友那里得到了二进制文件。他们让我把那个二进制文件转换成原始来源。我使用IDA Pro来反转二进制文件,但我在下面的这些说明中遇到了一些问题:

mov     [esp+230h+var_218], 74654D5Fh
mov     [esp+230h+var_214], 754D6C61h
mov     [esp+230h+var_210], 6873696Ch
mov     [esp+230h+var_20C], 5F61h

我尝试搜索十六进制但我没有找到任何结果。有人可以解释一下吗?

2 个答案:

答案 0 :(得分:1)

x86是小字节序,所以为了阅读它,你从dword文字的右边到左边开始。

字符串是" _MetalMulisha _ ",fwiw。

答案 1 :(得分:1)

详细说明Lord Kale XI's answer,x86是little endian archiecture。这实际上意味着我们将多字节整数的字节向后存储,即首先存储最低有效字节。我提供的链接很好地解释了它是如何工作的。

因此,在这些指令中,我们首先将整数74654D5Fh移动到内存中的某个位置。按顺序,这实际上写入了字节5F 4D 65 74。然后,我们将整数754D6C61h写入内存中的 next 四个字节,写入61 6C 4D 75,依此类推。

在这些指令之后,内存包含以下字节序列,每个字节都可以解释为ASCII字符:

  0x74654D5F      0x754D6C61      0x6873696C      0x00005F61
       |               |               |               |
       V               V               V               V
[   var_218  ]  [   var_214  ]  [   var_210  ]  [   var_20C  ]
5F  4D  65  74  61  6C  4D  75  6C  69  73  68  61  5F  00  00
'_' 'M' 'e' 't' 'a' 'l' 'M' 'u' 'l' 'i' 's' 'h' 'a' '_' '\0' '\0'

那么,这些指令正在做的是将以空值终止的字符串_MetalMulisha_写入从var_218开始的内存。