首页
社区
课程
招聘
有关局部变更返值的问题

提问者:suaqer 2020-3-2

 

想请问一下就是在课程中代码段里面:

1
2
3
4
5
6
   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了吗?辛苦啦

收藏
2条回答
Roger 2023-5-23

这个问题问得好,首先eax里面存放的是计算出来的一个值,把他放到ebp-4的意思是存放到局部变量中,再从局部变量中取出来放回eax,这两步是编译器写出来的,编译器不会像人类大脑那样智能,可能会有一些重复性的操作,具体你可以找一本编译原理的书来看看

回复 已采纳
Roger 2023-5-23

而且,您仔细看这个语句,我们做一个假设,假如eax里面存放的是一个字符串的地址,那么ebp-4里面存放的就是eax这个地址所对应的字符串内容,然后再把字符串内容的前四个字节放回到eax中,经过这两步,eax里面存放的数据变化为:地址→地址所对应的内容

回复
零基础入门pwn
  参与学习     1803 人
  提问次数     36 个
《零基础入门pwn》,短时间内踏入漏洞利用的大门,快速成为一名合格的pwn题选手
我的问答 领取收益
0
我的提问
0
我的回答
0
学习收益