可能重复:
LEA指令的目的是什么?
LEA指令?
所以我正在为类进行二进制炸弹分配(它有一堆阶段,你必须逐步执行程序的汇编代码并找到密码来解码"炸弹").
我无法完成当前阶段,因为我不理解lea命令.我已经读过它通常用于算术,但我只是不明白它是如何做到的.
我正在看的命令是
lea -0x18(%ebp), %ebx
lea -0x8(%ebp), %esi
Run Code Online (Sandbox Code Playgroud)
接下来是
mov -0x4 (%ebx), %eax
add -0x8(%ebx), %eax
Run Code Online (Sandbox Code Playgroud)
在下一行eax和ebx进行比较,如果它们等于程序继续,否则炸弹爆炸.
我已经足够了解这个阶段知道它想要6个数字,前两个是0和1.之后它做了一些操作来确定序列的其余部分是否正确(我假设lea命令是什么我需要解码才能找到下一个数字).
现在我找不到的是-0x18特别指的是什么.什么是负号呢?它表示减法吗?它在ebp之前看起来是18个字节吗?
感谢您的帮助.
rob*_*off 19
LEA指令使用与MOV指令相同的算法计算存储器地址.但与MOV指令不同,LEA指令只是将计算出的地址存储在目标寄存器中,而不是加载该地址的内容并存储它.
考虑您的第一个LEA指令:
lea -0x18(%ebp), %ebx
Run Code Online (Sandbox Code Playgroud)
该指令计算-0x18与EBP寄存器中的值之和.它得到一些结果S.它将S存储在EBX寄存器中.
在加数-0x18中," - "是负号,"0x"表示它是十六进制常量.因此加数为负18 16,即-24 10.所以这个LEA指令只是从EBP中的值中减去24并将结果存储在EBX中.
将其与您的MOV指令进行对比:
mov -0x4(%ebx), %eax
Run Code Online (Sandbox Code Playgroud)
该指令计算-0x4与EBX寄存器中的值之和.它获得了一些结果S.然后它在内存中的地址S处获取字的值,得到一些值M.它将M存储在EAX寄存器中.
| 归档时间: |
|
| 查看次数: |
25964 次 |
| 最近记录: |