整数溢出的汇编代码疑惑

来源:百度知道 编辑:UC知道 时间:2024/06/24 16:51:03
77F5BC38 mov eax, [ebx] ; length field
77F5BC3A lea eax, [eax+eax+2] ; *** integer overflow ***
77F5BC3E push eax
77F5BC3F push edi
77F5BC40 call ds:LocalAlloc
上面一段代码是从一个有问题的程序中逆向得到的。
eax应该是长度吧。假设为10,那[eax+eax+2]岂不是[0x00000022]?
就算eax比10大,[eax+eax+2]也是一个很低的地址,肯定不是在程序的内存空间里面,那去这里取值干嘛?

77F5BC3A lea eax, [eax+eax+2]

这句不是要取eax+eax+2这个地址,而是要把eax+eax+2的值赋给eax

就相当于mov eax,eax+eax+2 只不过这种写法是不允许的,所以就绕了个弯

子,先取偏移量为eax+eax+2中的内容[eax+eax+2],然后再把[eax+eax+2]的偏

移地址(即eax+eax+2)装入eax中。

地址被重定位了的。
这个地址是相对地址,相对于程序或者数据段开始位置的地址。