查看以下代码:
(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 命令只获取内存中某些字节的内容,它如何获取内存地址。
抱歉,如果有一些愚蠢的问题,但[ ]有时可能会非常混乱。