首页 > 编程语言 >C++11/14/17/20 新特性反汇编分析1

C++11/14/17/20 新特性反汇编分析1

时间:2024-09-08 15:51:56浏览次数:12  
标签:11 20 14 res 捕获 value eax ebp 函数

区间for迭代 类似于 java 中的 for each 看个例子: 数组的区间 for 迭代 我们从第一行开始看,首先把数组 a 的地址放到 eax 中,再把 eax 的值放到 [ebp-28h] 中,也就是 [ebp-28h] 存储了元素的首地址,同理 [ebp-34h] 也存了 a 的首地址(这里 猜测可能是多个变量存一个值?),然后 eax 加 14h 也就是 eax 存储了 a 元素最后一个 元素后一个 “ 元素 ” 的地址,用于设置循环次数,存储于 [ebp-40h] 。 之后无条件 近转移 跳转到 009F27E5 mov eax,dword ptr [ebp-34h] ,把 a 的首地 址存入 eax 然后判断 eax 中的值是否大于 a 数组最后元素的地址(越界判断),若越界,则直接 跳出 for 循环。 然后把 [ebp-34h] 也就是 a 首地址放到 eax 中,然后把 eax 中对应 a 数组元素的值放到 ecx 中,再把 ecx 的值放到 [ebp-4Ch] 中,其中 [ebp-4Ch] 存的就是 x 的地址。 之后执行 for 循环体的语句,然后跳转到 009F27DC mov eax,dword ptr [ebp-34h] 后面循环中, [ebp-34h] 存的是当前循环到元素的地址, [ebp-40h] 变量用于控制循环 次数, [ebp-4Ch] 存储 x Lambda表达式 Lambda 表达式是现代 C++ 中最重要的特性之一,而 Lambda 表达式,实际上就是 提供了一个类 似匿名函数的特性,而匿名函数则是在需要一个函数 考虑以下代码: 这里定义了一个 lambda 函数,值捕获 value 变量,在定义完 res lambda 函数后,修改 value = 10 ,最后调用 res 函数时,仍然输出 100 , 因为 res 在创建时就保存了一份 value 的拷贝 。 反汇编: 可以看到,创建 res 匿名函数时,首先把 value 变量的地址存储起来,压栈当成参 数,并调用 lambda 的构造函数,在构造函数里面自动复制了一份 value ? 调用 res 时,实际上时调用 lambda 类型 res 的 operator 函数,调用过程与普通函数相 似。 再考虑以下代码,这次使用的是引用捕获 输出的结果是 1000 ,说明最后调用 res() 时候,用的是没有拷贝的值。 显然值捕获和引用捕获的调用时候,反汇编编代码相同 我们来看看他们两个的 lambda 构造函数 引用捕获 值捕获: 显然值捕获里面,多了一条汇编指令,结合上下文,相比引用捕获,可以得知这里 多复制了一份 value 的值。 我们再看看两种捕获方式下,调用 res operator 函数也就是 res lambda 函数体的反汇 编,(第一张图为值传递) 可以看到(倒数几行不同),值捕获直接把自己存好的 value 拿出来乘上 100 ,并没 有利用原来的 value 待更新TODO

标签:11,20,14,res,捕获,value,eax,ebp,函数
From: https://blog.csdn.net/u011169466/article/details/141994253

相关文章

  • 中国农作物分布地图(2015-2021年)
    中国是世界人口最多的国家,在全球谷物生产方面排名第一。通过多样化作物种类的多熟制种植,可以显著增加农作物产量,并减少相关的环境影响。全球约12%的农田实行多熟制,其中34%的水稻地采用多熟制系统。中国用仅占全球7%的耕地养活了世界20%的人口。中国约三分之一的农田种植多熟作物,这......
  • P1419 寻找段落 题解
    其他学习笔记这题真是凝聚了很多精华,那么我们就介绍这题的四兄弟:大哥平均数这道题是其他兄弟的基础。二哥BestCow这位更是重量级,因为没特长只能强大哥的外貌,会大哥即识二哥。三哥PROSJEK这位哥看似有点创新却仍没逃过一家子的基因,只是变为了小数运算。四哥寻......
  • 陈润生院士新书推荐:中国生物信息学2035发展战略
    生物信息学(bioinformatics)是生命科学与计算机科学、信息科学、数学、统计学、系统科学等多学科相互交融而成的新兴学科。随着生命科学领域研究范式的变革,生物信息学已经从一门新兴交叉学科,发展成为催生生命科学领域新的研究方向和重大科学发现的重要原动力,也成为各国在生命健康和......
  • NOIP2024模拟赛5 总结
    NOIP2024模拟赛5总结T1天才俱乐部特判了\(sum-s<0\),但没有考虑\(sum-s=0\)。挂为0pts。T2实战教学由于写的不够优,贪心+二分的思路TLE了。由于不明原因,输出\(\max(a_i+b_i)\)能过。非常神奇。T3穿越银匙之门T4绳网委托一句话总结:挂分挂成sb了。......
  • 一键解锁创意未来:AE 2024最新版安装包下载及安装教程
    一键解锁创意未来:AE 2024最新版安装包下载及安装教程一键解锁创意未来:AE2024最新版安装包下载及安装教程在数字创意领域,AdobeAfterEffects(简称AE)一直是行业标杆,为无数设计师、动画师和视频编辑者提供了强大的工具,帮助他们将创意变为现实。随着技术的不断进步,Adobe公司也在不断......
  • 官方直链,安全高效:After Effects 2024安装包下载与安装教程
    官方直链,安全高效:After Effects 2024安装包下载与安装教程官方直链,安全高效:AfterEffects2024安装包下载与安装教程AdobeAfterEffects2024是一款强大的视频后期制作软件,广泛应用于电影、电视、广告等领域。它提供了丰富的特效和动画工具,帮助用户创建令人惊叹的视觉效果。本......
  • 告别繁琐,AE 2024安装包下载与快速安装全攻略
    告别繁琐,AE 2024安装包下载与快速安装全攻略告别繁琐,AE2024安装包下载与快速安装全攻略AdobeAfterEffects(简称AE)是一款广泛应用于影视后期制作、动态图形设计、视觉效果合成等领域的专业软件。随着技术的不断进步,Adobe公司每年都会推出新版本的AE,以满足用户对更高效率和更强大......
  • 高效创作从安装开始:Adobe AE 2024安装包下载与性能优化
    高效创作从安装开始:Adobe AE 2024安装包下载与性能优化高效创作从安装开始:AdobeAE2024安装包下载与性能优化在数字内容创作领域,AdobeAfterEffects(简称AE)一直是行业标杆。无论是电影特效、动态图形设计还是视频后期制作,AE都提供了强大的工具和功能。随着AdobeAE2024的发布,创......
  • 安装无忧,创作无限:AE 2024安装包下载与安装疑难解答
    安装无忧,创作无限:AE 2024安装包下载与安装疑难解答安装无忧,创作无限:AE2024安装包下载与安装疑难解答AdobeAfterEffects(简称AE)是一款广泛应用于影视后期制作、动态图形设计、视觉效果合成等领域的专业软件。随着技术的不断进步,Adobe公司每年都会推出新版本的AE,以满足用户日益增......
  • AE 2024安装包下载与安装:为专业视频编辑师打造的指南
    AE2024安装包下载与安装:为专业视频编辑师打造的指南AdobeAfterEffects(简称AE)是一款广泛应用于电影、电视、广告和网络视频制作的专业视频合成和特效软件。随着技术的不断进步,Adobe公司定期发布新版本,以满足不断变化的市场需求和用户期望。AE2024作为最新版本,带来了许多令人兴奋......