-
suaqer
2020-3-2
-
举报
想请问一下就是在课程中代码段里面:
0x8048401 <test+11> add eax, 0x1bff
0x8048406 <test+16> mov edx, dword ptr [ebp + 8]
0x8048409 <test+19> mov eax, dword ptr [ebp + 0xc]
0x804840c <test+22> add eax, edx
0x804840e <test+24> mov dword ptr [ebp - 4], eax
► 0x8048411 <test+27> mov eax, dword ptr [ebp - 4]
mov dword ptr [ebp - 4], eax 这里不是刚把eax的值写入到ebp - 4么,为什么下一步还要mov eax, dword ptr [ebp - 4],再将ebp - 4中的值返回给eax呢,eax中不已经是3了吗?辛苦啦
【讲师回复】
这个问题问得好,首先eax里面存放的是计算出来的一个值,把他放到ebp-4的意思是存放到局部变量中,再从局部变量中取出来放回eax,这两步是编译器写出来的,编译器不会像人类大脑那样智能,可能会有一些重复性的操作,具体你可以找一本编译原理的书来看看