mov(%edx,%ebx,1),%al有什么作用?

时间:2014-07-04 06:53:59

标签: assembly

我正在试图找出一个二元炸弹实验室,第5阶段。这不是一个家庭作业,而是我自己做的事情。

我发现一个类似的问题已经回答here但是我不明白答案,因为没有插入实际值。我试图找出究竟是什么,最终在%al,假设% al是目的地。我正在使用gdb和i r命令显示%ebx保存我为输入输入的字符串,即“device”,%edx为0.这是做什么用的?

3 个答案:

答案 0 :(得分:4)

等效的英特尔语法为mov al, [edx+ebx*1]

换句话说,它在edx + ebx*1形成的地址处从内存加载一个字节,并将该字节放在al寄存器中。请注意,*1(或AT& T语法中的, 1)是超级的;只需在AT& T语法中写[edx+ebx](%edx, %ebx))就可以实现同样的目标。

在你的情况下,我认为它正在从edx指向的字符串中的位置ebx读取一个字符。在这种情况下,指令更有意义mov (%ebx, %edx), al,因为您通常缩放索引而不是基址。但由于此处的比例因子为1,因此无关紧要。

答案 1 :(得分:1)

也看D(a, b, c)。 这表示a + b * c + D D表示偏移量,表示基数,b表示索引,c表示缩放。 这里的重点是缩放比例必须为1、2、4、8,因为它与类型

相关

答案 2 :(得分:1)

()指令用于计算内存地址。

(a,b,c)表示a + b * c。但是请注意c的值,因为它必须是1、2、4和8之一。这是由于对齐问题。