反汇编角度->C++ const
#include<iostream>
#include<stdlib.h>
using namespace std;
const int &add( const int &a,const int &b)
{
return a+b;
}
int main()
{
const int &result = add(5,8);
add(11, 8);//重复使用栈.排除虽然栈回收.但值没变的可能性
add(5, 8);
- add(5,8);
- add(5,8);
- add(5,8);
cout << result << endl;
system("pause");
return 0;
}
00FC18CE mov dword ptr [ebp-0D4h],8 ;创建一个地址用来保存8
00FC18D8 mov dword ptr [ebp-0E0h],5 ;创建一个地址用来保存5
00FC18E2 lea eax,[ebp-0D4h] ;将保存8的地址赋给eax.
00FC18E8 push eax ;地址压栈
00FC18E9 lea ecx,[ebp-0E0h] ;将保存5的地址赋给ecx
00FC18EF push ecx ;将地址压入栈中
00FC18F0 call add (0FC138Eh)
00FC18F5 add esp,8 ;回收栈
00FC18F8 mov dword ptr [result],eax
const int &add(const int &a, const int &b)
{
002217C0 push ebp
002217C1 mov ebp,esp
002217C3 sub esp,0CCh ;开辟局部栈空间,大小为0cch
002217C9 push ebx
002217CA push esi
002217CB push edi
002217CC lea edi,[ebp-0CCh] ;
002217D2 mov ecx,33h
002217D7 mov eax,0CCCCCCCCh
002217DC rep stos dword ptr es:[edi]
0
0FC17DE mov eax,dword ptr [a] ;将临时对象5的地址赋给eax (const int &a) [a]保存的是临时对象5的00FC17E1 mov ecx,dword ptr [eax] ;将eax保存的值给ecx
00FC17E3 mov edx,dword ptr [b] ;将临时对象b的地址赋给edx
00FC17E6 add ecx,dword ptr [edx] ;将edx保存的值加到ecx中
00FC17E8 mov dword ptr [ebp-0C8h],ecx ;将结果保存到ebp-0c8h中(临时对象)
00FC17EE lea eax,[ebp-0C8h] ;将结果地址赋给eax
}
- 执行完Add函数后将临时对象的地址保存到result引用中
00FC18F8 mov dword ptr [result],eax
double db = 10;
00EB1868 movsd xmm0,mmword ptr ds:[0EB6B38h]
00EB1870 movsd mmword ptr [db],xmm0
const int &q = db;
00EB1875 cvttsd2si eax,mmword ptr [db] ;db的值10赋给eax
00EB187A mov dword ptr [ebp-28h],eax ;将eax赋给ebp-28h(就是临时对象)
00EB187D lea ecx,[ebp-28h]
00EB1880 mov dword ptr [q],ecx
#include<iostream>
#include<stdlib.h>
using namespace std;
const int &add(const int &a, const int &b)
{
return a + b;
}
int main()
{
const int temp = 10;
int *p = (int *)&temp;
*p = 10000;
cout << *p << endl;
cout << temp << endl;
system("pause");
}
cout << temp << endl;
002C4F91 push 2C1069h
002C4F96 mov edi,esp
002C4F98 push 0Ah ;将10压栈进行输出.所以..反正汇编语言是这样解释的..那就是编译器的规则了
002C4F9A mov ecx,dword ptr ds:[2CA0A8h]
002C4FA0 call dword ptr ds:[2CA0A0h]
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
const int &p = 1;
system("pause");
}
const int &p = 1;
002618E8 mov dword ptr [ebp-18h],1 ;ebp-18h是临时对象.将1赋给临时对象
002618EF lea eax,[ebp-18h] ;取出临时对象的地址
002618F2 mov dword ptr [p],eax ;将地址赋给p
反汇编角度->C++ const的更多相关文章
- 从汇编的角度看待const与#define
先观察一下的代码: #include<stdio.h> int main(){ ; int y; int *pi=(int*)&i; *pi=; y=*pi; int tempi; ...
- 反汇编看c++引用
继续反汇编系列,本次使用vc2008在x86体系下分析c++中的引用. 定义一个引用类型和将一个变量转换成引用类型一样吗? 引用比指针安全,真的是这样吗,对引用不理解的话比指针还危险. 为什么要用常量 ...
- typedef,static,const用法
一.typedef主要功能是定义一个已存在类型的别名,但是和宏并存 宏与typedef区别 1.宏定义只是简单的字符串替换 2.typedef定义的类型是类型的别名,typedef后面是一个整体声明, ...
- 零基础逆向工程13_C语言07_指针01_反汇编
1."带*类型"的特征探测 宽度 在同一个平台下,任何指针变量的尺寸都是一样的(都等于系统字长),如在32位平台中任何类型指针宽度都是32位. 声明 1.带有* 的变量类型的标准写 ...
- CAD图在线Web测量工具代码实现(测量距离、面积、角度等)
CAD如今在各个领域均得到了普遍的应用并大大提高了工程技术人员的工作效率.在桌面端,AutoCAD测量工具已经非常强大:然后在Web端,如何准确.快速的对CAD图在Web进行测量呢? 功能 能Web在 ...
- (转)Windows驱动编程基础教程
版权声明 本书是免费电子书. 作者保留一切权利.但在保证本书完整性(包括版权声明.前言.正文内容.后记.以及作者的信息),并不增删.改变其中任何文字内容的前提下,欢迎任何读者 以任何形式(包括 ...
- 【HEVC】4、HM-16.7编码一个CU(帧内部分) 3.帧内预测各种模式实现
HEVC中一共定义了35中帧内编码预测模式,编号分别以0-34定义.其中模式0定义为平面模式(INTRA_PLANAR),模式1定义为均值模式(INTRA_DC),模式2~34定义为角度预测模式(IN ...
- 仿造slither.io第一步:先画条蛇
前言 最近 slither.io 貌似特别火,中午的时候,同事们都在玩,包括我自己也是玩的不亦乐乎. 好久好久没折腾过canvas相关的我也是觉得是时候再折腾一番啦,所以就试着仿造一下吧.楼主也没写过 ...
- 网站启动SSL, http变为https后,session验证码错误解决方法
网站启动SSL, http变为https后,session验证码错误解决方法 最近公司需要后台启动安全证书,证书安装完毕后,后台老提示 验证码错误,经过几天的研究,此问题已经得到有效解决,现把方法 ...
随机推荐
- NSXMLParser
NSXMLParser的使用 2011-05-05 15:50:17| 分类: 解析|字号 订阅 NSXMLParser解析xml格式的数据 用法如下: 首先,NSXMLParser必须继续 ...
- C#MySQL增删改查
首先在项目中添加引用 using MySql.Data.MySqlClient; 连接字符串 private string connString="server=localhost;use ...
- 记住密码功能 JS结合JQuery 操作 Cookie 实现记住密码和用户名!
// 记住密码功能 JS结合JQuery 操作 Cookie 实现记住密码和用户名! var username = document.getElementById("username&quo ...
- JS数据结构及算法(一) 堆栈
最近在看<学习JavaScript数据结构与算法>这本书,感觉自己又涨知识了 哈哈... 现在将自己看的做个总结,也是巩固理解. 栈:先进后出,新添加和待删除的元素都保存在栈顶.可以用数组 ...
- NOIP模拟赛 魔方
[题目描述] ccy(ndsf)觉得手动复原魔方太慢了,所以他要借助计算机. ccy(ndsf)家的魔方都是3*3*3的三阶魔方,大家应该都见过. (3的“顺时针”改为“逆时针”,即3 4以图为准.) ...
- spring boot自动配置实现
自从用了spring boot,都忘记spring mvc中的xml配置是个什么东西了,再也回不去.为啥spring boot这么好用呢, 约定大于配置的设计初衷, 让我们只知道维护好applicat ...
- REST Framework 处理一个超链接序列化问题
问题简述 翻译: 不正确的配置 无法使用视图名称“snippet-detail”解析超链接关系的URL.您可能没有在API中包含相关的模型,或者在该字段上错误地配置了' lookup field '属 ...
- HashMap存储原理
1. HashMap概述 HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变. ...
- guava笔记
guava是在原先google-collection 的基础上发展过来的,是一个比较优秀的外部开源包,最近项目中使用的比较多,列举一些点.刚刚接触就被guava吸引了... 这个是gua ...
- Python爬取全站妹子图片,差点硬盘走火了!
在这严寒的冬日,为了点燃我们的热情,今天小编可是给大家带来了偷偷收藏了很久的好东西.大家要注意点哈,我第一次使用的时候,大意导致差点坏了大事哈! 1.所需库安装 2.网站分析 首先打开妹子图的官网(m ...