我找到了这个密码:
lea 0x10(%edi),%esi
mov %esi,0x4(%edi)
但我真的不明白这个组合。
发布于 2013-06-11 16:52:23
mov
最多支持一个内存操作数。无论如何,您的示例似乎有不同的语义(如下面@zch所提到的)。您可以获取英特尔软件开发人员手册的副本,并阅读它的所有您想要的。
编辑:关于你的问题“用%esi写什么值? lea是计算哪个地址的偏移量?”
esi
得到了edi + 0x10
;这就是0x10(%edi)
的意思。lea
代表“加载有效地址”。也就是说,它将edi
解释为指针,并将其增量为0x10,将结果存储在esi
中。
发布于 2013-06-14 15:02:20
lea
与mov
在x86程序集中的使用与在C/C++中的使用是相同的,即:
char *ptr;
...
ptr = &val;
与
char *ptr;
...
*ptr = val;
lea
计算地址、mov
(或具有内存操作数的其他指令)取消(访问)它。
因此,lea
在x86程序集中所做的事情--在C/C++中称为“指针算法”--不涉及内存访问。
https://stackoverflow.com/questions/17049544
复制相似问题