【发布时间】:2015-10-04 07:43:04
【问题描述】:
查看以下代码:
(ebp-0x8 -> int)
(ebp-0x4 -> int*)
=> 0x80483f3 <main+6>: mov DWORD PTR [ebp-0x8],0x0
0x80483fa <main+13>: mov DWORD PTR [ebp-0x4],0x0
0x8048401 <main+20>: mov DWORD PTR [ebp-0x8],0xa
0x8048408 <main+27>: lea eax,[ebp-0x8]
0x804840b <main+30>: mov DWORD PTR [ebp-0x4],eax
0x804840e <main+33>: mov eax,0x0
0x8048413 <main+38>: leave
0x8048414 <main+39>: ret
真的需要 LEA 命令吗? 我知道下面的表达式是错误的,无效的,不管左边的错误地址,但是没有类似的方法可以使它变成这样吗?
=> 0x80483f3 <main+6>: mov DWORD PTR [ebp-0x8],0x0
0x80483fa <main+13>: mov DWORD PTR [ebp-0x4],0x0
0x8048401 <main+20>: mov DWORD PTR [ebp-0x8],0xa
0x804840b <main+30>: mov DWORD PTR [ebp-0x4],ebp-0x8
0x804840e <main+33>: mov eax,0x0
0x8048413 <main+38>: leave
0x8048414 <main+39>: ret
我认为这是不可能的,但我想确定一下。
最后一个问题,表达式ebp-0x8 理论上会返回“ebp 寄存器的内容减去0x8”。
因此表达式[ebp-0x8] 将返回地址“ebp 寄存器的内容减去0x8” 处的内存内容。
现在我想知道如果 LEA 命令只获取内存中某些字节的内容,它如何获取内存地址。
抱歉,如果有一些愚蠢的问题,但 [ ] 有时可能会非常令人困惑。
【问题讨论】:
-
为什么这被标记为 [C]?这个问题不是关于C的。我为你删除了标签。
-
哦,不好意思,因为代码是GCC从C源代码生成的,本来我也想加的。
标签: assembly x86 intel addressing