我正在试图找出一个二元炸弹实验室,第5阶段。这不是一个家庭作业,而是我自己做的事情。
我发现一个类似的问题已经回答here但是我不明白答案,因为没有插入实际值。我试图找出究竟是什么,最终在%al,假设% al是目的地。我正在使用gdb和i r命令显示%ebx保存我为输入输入的字符串,即“device”,%edx为0.这是做什么用的?
答案 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之一。这是由于对齐问题。