什么是MOV EAX,DWORD PTR DS:[ESI + EBP * 8]呢?

时间:2014-11-26 17:14:03

标签: debugging assembly ollydbg

如果我在Ollydbg中逐步调试调试器,我会看到

MOV EAX,DWORD PTR DS:[ESI + EBP * 8]

并注册ESI = 0040855C和EBP = 00000000。

我的问题是我不知道2注册* 8

2 个答案:

答案 0 :(得分:3)

MOV EAX,DWORD PTR DS:[ESI + EBP * 8]

MOV - 移动

EAX - 到EAX(通常这将是您刚刚计算的值)

DWORD PTR - 来自

指向的值

[DS: - 在数据段中]

[ESI + EBP * 8] - ESI加8倍EBP。

将EAX中的值移动到ESI + EBP * 8指向的地址(ESI加上EBP的8倍,这意味着它是如何编写的)

这可能用于从数组加载数据,其中8用于将计数器(即EBP)按比例放大到存储事物的大小(8字节),ESI包含数据的地址数组的开始。因此,如果EBP为零,则将数据存储在ESI + 0中,如果EBP = 1,则最终存储在ESI + 8等处。

答案 1 :(得分:2)

在正常的INTEL语法中,此指令将值内存移动到 EAX中。

MOV EAX,DWORD PTR DS:[ESI+EBP*8]

它通常用于从数组中提取值 该阵列位于DS:ESI的存储器中 元素通过EBP索引 标度为8意味着每个元素都是64位长,并且该指令只读低字。