【语法】++前 和 后++ Another
来源:互联网 发布:网络代购 编辑:程序博客网 时间:2024/04/29 03:43
承接上文,为了区别开前置自增和后置自增的运算符重载的不同的声明方式,现在我们将进入重载函数内部看个究竟。
很不幸,首先CB对于STL提供的函数不能提供混合源代码的反汇编结果,所以我们直接看看吧。
这是<__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >::operator++()>函数的内部:
0x00428E7Cpush ebp0x00428E7Dmov ebp,esp0x00428E7Fsub esp,0x40x00428E82mov DWORD PTR [ebp-0x4],ecx0x00428E85mov eax,DWORD PTR [ebp-0x4]0x00428E88mov eax,DWORD PTR [eax]0x00428E8Alea edx,[eax+0x4]0x00428E8Dmov eax,DWORD PTR [ebp-0x4]0x00428E90mov DWORD PTR [eax],edx0x00428E92mov eax,DWORD PTR [ebp-0x4]0x00428E95leave0x00428E96ret
传入的i是ecx,然后对ecx取址得到迭代器对应的内存空间,之后其首地址对应的就是那个内部的真正访问数据的迭代器,对其自增。
ebp+0x4保存的是传入的i的地址,自增完毕之后进行保存。
最后回传自增后的i的地址。
这是<__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >::operator++(int)>函数的内部:
0x00428E48push ebp0x00428E49mov ebp,esp0x00428E4Bsub esp,0x280x00428E4Emov DWORD PTR [ebp-0x1c],ecx0x00428E51mov eax,DWORD PTR [ebp-0x1c]0x00428E54mov eax,DWORD PTR [eax]0x00428E56lea ecx,[eax+0x4]0x00428E59mov edx,DWORD PTR [ebp-0x1c]0x00428E5Cmov DWORD PTR [edx],ecx0x00428E5Emov DWORD PTR [ebp-0xc],eax0x00428E61lea eax,[ebp-0x10]0x00428E64lea edx,[ebp-0xc]0x00428E67mov DWORD PTR [esp],edx0x00428E6Amov ecx,eax0x00428E6Ccall 0x428e30 <__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >::__normal_iterator(int* const&)>0x00428E71sub esp,0x40x00428E74mov eax,DWORD PTR [ebp-0x10]0x00428E77leave0x00428E78ret 0x4我们注意到这个过程又调用了一个函数......我们也把跟进去看看吧......
0x00428E30push ebp0x00428E31mov ebp,esp0x00428E33sub esp,0x40x00428E36mov DWORD PTR [ebp-0x4],ecx0x00428E39mov eax,DWORD PTR [ebp+0x8]0x00428E3Cmov edx,DWORD PTR [eax]0x00428E3Emov eax,DWORD PTR [ebp-0x4]0x00428E41mov DWORD PTR [eax],edx0x00428E43leave0x00428E44ret 0x4如上,我们获得了全部的流程。
0 0
- 【语法】++前 和 后++ Another
- 【语法】++前 和 后++
- 前++和后++
- 前触发器和后触发器
- 前仿真和后仿真
- 前++和后++的实现
- 前驱车和后驱车
- 前++/--和后++/--之坑
- 前级和后级
- 三年前和三年后
- 前、中、后缀表达式和前、中、后序遍历
- 前触发器和后触发器简介(downmoon)
- 前触发器和后触发器简介
- 前触发器和后触发器简介
- 男人在拥有女人前和后
- 前触发器和后触发器简介
- 前触发器和后触发器简介(downmoon)
- 前触发器和后触发器简介
- 文件上传入门一
- 真是够气人
- smail基本语法
- Hbase基本原理、及存储知识
- javaStudy_day19(上)
- 【语法】++前 和 后++ Another
- js回调函数
- 剑指offer---不能加减乘除做加法
- AMQP之RabbitMq
- Web服务器Tomcat探析
- HDU 4991 Ordered Subsequence(dp+树状数组)
- 树莓派作为下载机的应用----不仅仅只有树莓派
- GC及其工作原理介绍
- javaStudy_day19(下)