当前位置: 首页 > news >正文

c++没有返回值的返回值

在这里插入图片描述

上面的函数search没有返回值,因为a不等于1,但是输出的时候会输出6.这恰巧是x的值,如果我们希望a不等于1时返回x,那么这种结果反而是正确的.有时候这种错误的代码可能产生正确的结果反而会加大debug难度

int search(int n)
{
00007FF66DB723E0  mov         dword ptr [rsp+8],ecx  
00007FF66DB723E4  sub         rsp,18h  int x = 6;
00007FF66DB723E8  mov         dword ptr [x],6  int a = 0;
00007FF66DB723F0  mov         dword ptr [rsp],0  a = x;
00007FF66DB723F7  mov         eax,dword ptr [x]  
00007FF66DB723FB  mov         dword ptr [rsp],eax  if (a == 1)
00007FF66DB723FE  cmp         dword ptr [rsp],1  
00007FF66DB72402  jne         search+26h (07FF66DB72406h)  return 0;	
00007FF66DB72404  xor         eax,eax  
}
00007FF66DB72406  add         rsp,18h  
00007FF66DB7240A  ret  
--- 无源文件 -----------------------------------------------------------------------
00007FF66DB7240B  int         3  
00007FF66DB7240C  int         3  
00007FF66DB7240D  int         3  
00007FF66DB7240E  int         3  
00007FF66DB7240F  int         3  
--- D:\code\test\源.cpp ---------------------------------------------------------int main()
{	
00007FF66DB72410  sub         rsp,38h  int ret = search(0);
00007FF66DB72414  xor         ecx,ecx  
00007FF66DB72416  call        search (07FF66DB723E0h)  
00007FF66DB7241B  mov         dword ptr [ret],eax  

上面是它的反汇编代码,我们可以看到

	a = x;
00007FF66DB723F7  mov         eax,dword ptr [x]  
00007FF66DB723FB  mov         dword ptr [rsp],eax    

在a=x;这句话,它把x放到寄出去eax,然后再把寄出去eax放到a.
这本没有问题,
但是

	int ret = search(0);
00007FF66DB72414  xor         ecx,ecx  
00007FF66DB72416  call        search (07FF66DB723E0h)  
00007FF66DB7241B  mov         dword ptr [ret],eax  

上面代码的意思是先调用search函数,然后把eax寄存器的值赋予ret.在汇编中,它会约定好返回值存在eax寄存器
但是如果你没有返回值对eax寄存器的值进行更新,那么他就会得到之前存在eax寄存器的值

总结:汇编总是认为你有返回值存在某个寄存器上,这些寄存器并不是返回值独享的,可能被之前操作使用,有可能没被用过,但是无论如此,寄存器从二进制的角度来看总是有值的

相关文章:

c++没有返回值的返回值

上面的函数search没有返回值,因为a不等于1,但是输出的时候会输出6.这恰巧是x的值,如果我们希望a不等于1时返回x,那么这种结果反而是正确的.有时候这种错误的代码可能产生正确的结果反而会加大debug难度 int search(int n) { 00007FF66DB723E0 mov dword ptr [rsp8],e…...

全网最全卡方检验汇总

一文整理了卡方检验全部内容,包括卡方检验的定义(基本思想、卡方值计算、适用条件分析)、卡方检验分类(2*2四格表卡方、R*C表格卡方、配对卡方、卡方拟合优度检验、分层卡方)、卡方检验如何分析(数据格式、…...

Java基础-中级-高级面试题汇(一)

第一部分: Java基础面试题汇总 1.面向对象和面向过程的区别? 面向对象和面向过程是两种不同的编程思想。面向对象是一种以对象为中心的编程思想,将数据和处理数据的方法封装在一起,形成一个类。程序通过创建对象来调用类中的方法…...

数据结构 / day04 作业

1. 单链表任意位置删除, 单链表任意位置修改, 单链表任意位置查找, 单链表任意元素查找, 单链表任意元素修改, 单链表任意元素删除, 单链表逆置 // main.c#include "head.h"int main(int argc, const char *argv[]) {Linklist headNULL; //head 是头指针// printf(&q…...

Java核心知识点整理大全20-笔记

目录 17. 设计模式 17.1.1. 设计原则 17.1.24. 解释器模式 18. 负载均衡 18.1.1.1. 四层负载均衡(目标地址和端口交换) 18.1.1.2. 七层负载均衡(内容交换) 18.1.2. 负载均衡算法/策略 18.1.2.1. 轮循均衡(Roun…...

Spark---转换算子、行动算子、持久化算子

一、转换算子和行动算子 1、Transformations转换算子 1)、概念 Transformations类算子是一类算子(函数)叫做转换算子,如map、flatMap、reduceByKey等。Transformations算子是延迟执行,也叫懒加载执行。 2)、Transf…...

什么是关系型数据库?

什么是关系型数据库? 关系型数据库(RDBMS)是建立在关系模型基础上的数据库系统。关系模型是一种数据模型,它表示数据之间的联系,包括一对一、一对多和多对多的关系。在关系型数据库中,数据以表格的形式存储…...

【LeetCode】挑战100天 Day12(热题+面试经典150题)

【LeetCode】挑战100天 Day12(热题面试经典150题) 一、LeetCode介绍二、LeetCode 热题 HOT 100-142.1 题目2.2 题解 三、面试经典 150 题-143.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站,提供各种算法和数据结构的题目&…...

ArcGIS10.x系列 Python工具箱教程

ArcGIS10.x系列 Python工具箱教程 目录 1.前提 2.需要了解的资料 3.Python工具箱制作教程 4. Python工具箱具体样例代码(DEM流域分析-河网等级矢量化) 1.前提 如果你想自己写Python工具箱,那么假定你已经会ArcPy,如果只是自己…...

【蓝桥杯】刷题

刷题网站 记录总结刷题过程中遇到的一些问题 1、最大公约数与最小公倍数 a,bmap(int,input().split())sa*bwhile a%b:a,bb,a%bprint(b,s//b)2.迭代法求平方根(题号1021) #include<stdio.h> #include<math.h> int main() {double x11.0,x2;int a;scanf("%d&…...

软件产品登记的材料条件

(1&#xff09;申请双软认证前应该要获得信息产业部授权的软件检测机构出具的检测证明&#xff0c;这份检测证明可以到软件行业协会申请&#xff0c;然后协会会派专家到公司进行“检测”&#xff0c;检测通过后出具证明&#xff0c;这份证明的申请与软件著作权等无关&#xff0…...

春节后跟进客户开发信模板?外贸邮件模板?

适合新年的客户开发信模板&#xff1f;年后给客户的邮件怎么写&#xff1f; 在春节这一传统的中国节日结束后&#xff0c;跟进客户对于维持和发展业务至关重要。客户开发信模板是一种有效的工具。蜂邮将介绍一些春节后跟进客户开发信模板的关键技巧&#xff0c;以确保您的业务…...

个人财务管理软件CheckBook Pro mac中文版特点介绍

CheckBook Pro mac是一款Mac平台的个人财务管理软件&#xff0c;主要用于跟踪个人收入、支出和账户余额等信息。 CheckBook Pro mac 软件特点 简单易用&#xff1a;该软件的用户界面非常简洁明了&#xff0c;即使您是初学者也可以轻松上手。 多账户管理&#xff1a;该软件支持…...

rfc4301- IP 安全架构

1. 引言 1.1. 文档内容摘要 本文档规定了符合IPsec标准的系统的基本架构。它描述了如何为IP层的流量提供一组安全服务&#xff0c;同时适用于IPv4 [Pos81a] 和 IPv6 [DH98] 环境。本文档描述了实现IPsec的系统的要求&#xff0c;这些系统的基本元素以及如何将这些元素结合起来…...

【数据结构/C++】线性表_双链表基本操作

#include <iostream> using namespace std; typedef int ElemType; // 3. 双链表 typedef struct DNode {ElemType data;struct DNode *prior, *next; } DNode, *DLinkList; // 初始化带头结点 bool InitDNodeList(DLinkList &L) {L (DNode *)malloc(sizeof(DNode))…...

前端已死?看看我的秋招上岸历程

背景 求职方向&#xff1a;web前端 技术栈&#xff1a;vue2、springboot&#xff08;学校开过课&#xff0c;简单的学习过&#xff09; 实习经历&#xff1a;两段&#xff0c;但都是实训类的&#xff0c;说白了就是类似培训&#xff0c;每次面试官问起时我也会坦诚交代&…...

Flink Flink中的合流

一、Flink中的基本合流操作 在实际应用中&#xff0c;我们经常会遇到来源不同的多条流&#xff0c;需要将它们的数据进行联合处理。所以 Flink 中合流的操作会更加普遍&#xff0c;对应的 API 也更加丰富。 二、联合&#xff08;Union&#xff09; 最简单的合流操作&#xf…...

工业园区重金属废水深度处理工程项目,稳定出水0.1mg/l

随着环保要求不断提高&#xff0c;工业废水处理已成为众多企业的必修课。然而在工业生产中&#xff0c;如何有效处理含有重金属的废水成为了一个关键的挑战。 重金属废水是指含有汞、铅、铜、镉、锌、镍等有毒有害物质的废水&#xff0c;来源于矿山开采、金属冶炼、电镀、印刷线…...

element table滚动条失效

问题描述:给el-table限制高度之后滚动条没了 给看看咋设置的&#xff1a; <el-table:data"tableData"style"width: 100%;"ref"table"max-height"400"sort-change"changeSort">对比了老半天找不出问题&#xff0c;最后…...

代码随想录算法训练营 ---第四十六天

第一题&#xff1a; 简介&#xff1a; 本题的重点在于确定背包容量和物品数量 确定dp数组以及下标的含义 dp[i] : 字符串长度为i的话&#xff0c;dp[i]为true&#xff0c;表示可以拆分为一个或多个在字典中出现的单词。 2.确定递推公式 如果确定dp[j] 是true&#xff0c;且…...

实时体积云渲染进阶:Perlin与Worley噪声的混合艺术

1. 理解体积云渲染的基础噪声 在实时体积云渲染中&#xff0c;噪声算法扮演着关键角色。就像画家需要不同的笔触来表现云层的质感&#xff0c;我们需要Perlin和Worley这两种基础噪声来构建云的形态。这两种噪声各有特点&#xff0c;理解它们的差异是混合使用的前提。 Perlin噪声…...

2026 年AI Agent面试题及答案Top30

智能体人工智能正在各行各业迅速普及,许多新兴公司都在寻找这方面的专家。本文收录了一些来自初级和中级职位面试的真实问题,其中一些是我自己设计的,另一些则旨在帮助读者对该领域有一个大致的了解。 请记住,在正式面试中,你可能会被要求先完成一项实践练习。你也可能会被…...

【奇点大会内部纪要】:为什么92%的视觉导航Agent在动态场景中失效?3类被忽视的传感器-语义耦合漏洞

第一章&#xff1a;【奇点大会内部纪要】&#xff1a;为什么92%的视觉导航Agent在动态场景中失效&#xff1f;3类被忽视的传感器-语义耦合漏洞 2026奇点智能技术大会(https://ml-summit.org) 在2026奇点大会闭门技术纪要中&#xff0c;来自MIT、ETH Zurich与大疆研究院的联合…...

gte-base-zh快速上手:Xinference框架下的文本嵌入模型部署实战

gte-base-zh快速上手&#xff1a;Xinference框架下的文本嵌入模型部署实战 1. 引言&#xff1a;认识gte-base-zh文本嵌入模型 文本嵌入技术是自然语言处理中的核心基础&#xff0c;它能够将文字转换为计算机可理解的数字向量。gte-base-zh作为阿里巴巴达摩院基于BERT框架训练…...

cv_unet_image-colorization快速部署:conda虚拟环境隔离最佳实践

cv_unet_image-colorization快速部署&#xff1a;conda虚拟环境隔离最佳实践 1. 项目概述 cv_unet_image-colorization 是一款基于 UNet 架构深度学习模型开发的本地化图像上色工具。这个工具采用了阿里魔搭开源的图像上色算法&#xff0c;能够精准识别黑白图像中的物体特征、…...

如何为db_tutorial项目添加图数据模型支持:完整指南

如何为db_tutorial项目添加图数据模型支持&#xff1a;完整指南 【免费下载链接】db_tutorial Writing a sqlite clone from scratch in C 项目地址: https://gitcode.com/gh_mirrors/db/db_tutorial db_tutorial是一个用C语言从零实现SQLite克隆的开源项目&#xff0c;…...

终极指南:如何快速解决RevokeMsgPatcher微信3.9.10.19版本路径兼容性问题

终极指南&#xff1a;如何快速解决RevokeMsgPatcher微信3.9.10.19版本路径兼容性问题 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: …...

跨越语言鸿沟:中文论文英译投稿国际期刊的实战策略与工具精讲

1. 翻译工具的选择与组合使用 对于中文论文的英文翻译&#xff0c;选择合适的工具是第一步。市面上有众多翻译软件&#xff0c;但并非所有都适合学术场景。我实测过几十款工具&#xff0c;发现DeepL、Grammarly和QuillBot这三款组合使用效果最佳。 DeepL的翻译质量在学术场景下…...

手把手教你用Rock 3A开发板调试RK3568:从U-Boot卡死到内核panic的实战排错

手把手教你用Rock 3A开发板调试RK3568&#xff1a;从U-Boot卡死到内核panic的实战排错 嵌入式开发者最头疼的莫过于开发板启动失败——电源灯亮了&#xff0c;风扇转了&#xff0c;但串口一片寂静。本文将以Radxa Rock 3A开发板为例&#xff0c;带你深入RK3568芯片的启动全链路…...

STM32+EC800M-CN 4G数传项目避坑指南:从AT指令调试到花生壳内网穿透

STM32与EC800M-CN 4G数传实战&#xff1a;从AT指令调试到内网穿透的深度排障手册 当你在深夜的实验室里盯着串口调试终端&#xff0c;第37次发送ATQIOPEN指令却依然收到ERROR响应时&#xff0c;这种挫败感我深有体会。EC800M-CN作为移远通信的明星4G模块&#xff0c;在物联网项…...