c++反汇编逆向还原——for循环(笔记)

 c++反汇编逆向还原代码for循环的实现,for循环和while循环在逆向还原的区别

一、汇编 

 mov :将源操作数复制到目的操作数

lea   :与mov类似

mov a,b   表示将b赋值给a  若是 mov a,[b] 这是将b的地址赋值给a,相当于指针

jmp  跳转指令

cmp :比较

jg    : jle  前面>后面    

push:压栈  这里是 将ebp_n的地址给eax,然后再push eax

把eax压入堆栈,意味着加下来会有操作改变eax

看到后面push的%d以及call j_scanf_s方法

可以猜到 把输入的数赋值给eax,也就是ebp_n的指针,即输入一个数赋值给ebp_n

这些指令的详情解释可以看本笔记专栏的关于这些指令的介绍文章

点我跳转——c++反汇编逆向还原指令jge jg jle jl jne je

二、代码还原 

2.1循环类型判断

可以看上面的汇编代码,向这样蓝色的线绕了一个圈又回到起点,可能是for循环,也可能是while循环,这就需要我们分析汇编代码判断,在上面的汇编代码图片左下角有循环每次

add eax,1   也就是自增1的代码,所以我们可以将其判断为for循环

while循环和for循环在还原的时候其实可以说没有太大的区别,原本是for循环的代码可以逆向还原成while,while也同理

 2.2汇编代码还原

原原本本按照汇编还原代码 

#include<stdio.h>int main()
{int ebp_sum=0;int ebp_n=0;scanf("%d",&ebp_n);int ebp_i=0;for(;ebp_i<=ebp_n;){int eax=ebp_sum;eax=eax+ebp_i;ebp_sum=eax;eax=ebp_i;eax=eax+1;ebp_i=eax;}printf("%d",ebp_sum);return 0;
}

正常写代码的思路还原的代码(整理后的代码)

#include<stdio.h>int main()
{int ebp_sum=0;int ebp_n=0;scanf("%d",&ebp_n);for(int ebp_i=0;ebp_i<=ebp_n;ebp_i++){ebp_sum+=ebp_i;}printf("%d",ebp_sum);return 0;
}

运行结果

 三、源代码 

源代码的意思:输入一个数字n,输出1-n的所有数字的和

 可以看到还原成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/880525.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一弹:llama.cpp编译

1.编译llama.cpp命令行&#xff08;电脑版本&#xff09;&#xff1b; 2.交叉编译安卓命令行版本。 一、Llama.cpp是什么&#xff1f; 二、Llama.cpp编译 首先我们尝试编译llama.cpp. 2.1 下载llama.cpp 项目的github地址&#xff1a; https://github.com/ggerganov/llama…

k8s pv(PersistentVolume) 状态含义

一、PV 状态含义 在Kubernetes中&#xff0c;PersistentVolume&#xff08;PV&#xff09;有几种不同的状态&#xff0c;这些状态反映了PV的生命周期和可用性。以下是主要的PV状态及其含义&#xff1a; Available: 表示该PV尚未被任何PersistentVolumeClaim (PVC)绑定&#xf…

Kafka系列之:安装部署CMAK,CMAK管理大型Kafka集群参数调优

Kafka系列之:安装部署CMAK,CMAK管理大型Kafka集群参数调优 一、CMAK二、要求三、配置四、启动服务五、使用 Security 启动服务六、消费者/生产者滞后七、从 Kafka Manager 迁移到 CMAK八、CMAK管理大型Kafka集群参数调优九、后台运行CMAK十、输出日志一、CMAK CMAK(之前称为…

Linux---文件io

1.系统调用 由操作系统实现并提供给外部应用程序的编程接口。(Application Programming Interface&#xff0c;API)。是应用程序同系统之间数据交互的桥梁。 C标准函数和系统函数调用关系。一个helloworld如何打印到屏幕。 man手册中一共有九卷&#xff0c;其中一卷就有讲到系…

连锁店收银系统如何选择?

在新零售背景下&#xff0c;连锁店的收银系统扮演着至关重要的角色。随着科技的不断发展和消费者需求的不断变化&#xff0c;一款功能齐全的收银系统不仅可以提高便利店的运营效率&#xff0c;还可以提供更好的消费体验。以下是连锁店收银系统必备的功能。 1.收银系统能支持独…

【二十七】【QT开发应用】VS如何复制项目,QT无边窗窗口Pro版本,信号与信号槽的应用,背景图片自适应控件大小

VS复制项目 在使用VS的过程中,有的时候我们需要复制我们已经存在的项目. 我们可以先创建一个新的项目. 接着把需要复制的项目的文件复制粘贴到新的项目文件夹中. 不要忘记添加现有项目. CFrameLessWidgetBase.h #pragma once #include <QWidget> class CFrameLessWi…

书生大模型实战(从入门到进阶)L2-茴香豆:企业级知识库问答工具

目录 茴香豆介绍 茴香豆本地标准版搭建 环境搭建 配置服务器&#xff1a; 搭建茴香豆虚拟环境&#xff1a; 安装茴香豆 下载茴香豆 安装茴香豆所需依赖 下载模型文件 更改配置文件 知识库创建 测试知识助手 命令行运行 Gradio UI 界面测试 本文是对书生大模型L2-茴香…

SwiftUI简明概念(3):Path.addArc的clockwise方向问题

一、画个下半圆 SwiftUI中绘制下半圆的一个方法是使用Path.addArc&#xff0c;示例代码如下&#xff1a; var body: some View {Path { path inpath.addArc(center: CGPoint(x: 200, y: 370), radius: 50, startAngle: Angle(degrees: 0), endAngle: Angle(degrees: 180.0), …

自然语言处理实战项目:从基础到实战

自然语言处理实战项目&#xff1a;从基础到实战 自然语言处理&#xff08;Natural Language Processing, NLP&#xff09;是人工智能的重要分支&#xff0c;致力于让计算机能够理解、生成和处理人类语言。NLP 在搜索引擎、智能客服、语音助手等场景中扮演着关键角色。本文将带…

不同领域的常见 OOD(Out-of-Distribution)数据集例子

以下是几个来自不同领域的常见 OOD&#xff08;Out-of-Distribution&#xff09;数据集例子&#xff0c;这些数据集常用于测试和研究模型在分布变化或分布外数据上的泛化能力&#xff1a; 1. 计算机视觉领域 CIFAR-10 vs. CIFAR-10-C / CIFAR-100-C: 描述&#xff1a;CIFAR-10…

MyBatis-Plus分页查询

在实际开发中&#xff0c;对于大量数据的查询&#xff0c;可以通过分页查询的方式来减少查询量和提高查询效率。在 MyBatis-Plus 中&#xff0c;分页查询可以通过使用 Page 对象和 IService 接口提供的分页方法来实现。MyBatis-Plus 的分页插件 PaginationInnerInterceptor 提供…

负载均衡--会话保持失败原因及解决方案(五)

会话保持失败可能由多种因素导致&#xff0c;以下是一些主要原因及其解释&#xff1a; 一、服务器及网络问题 服务器故障&#xff1a; 服务器出现故障或不稳定&#xff0c;导致无法正确处理会话信息。这可能是由于硬件故障、网络问题或软件错误等引起的。网络问题&#xff1a…

some 牛课题

D-Cidoai的字符集合_牛客练习赛128 (nowcoder.com) #include "bits/stdc.h" #define int long long using namespace std; int fa[100000000]; int sz[100000000]; int find(int n) {if(n!fa[n])fa[n]find(fa[n]);return fa[n]; } map<string,int>mp; signed …

Unicode 简介、发展历程与编码方式

原文链接&#xff1a;https://www.jianshu.com/p/cde52dfc4a9e 计算机作为人类制造出的最为强大的工具&#xff0c;将计算机变得更加强大和好用&#xff0c;是近百年来人类科技发展的主旋律和主要动力。 为了充分利用计算机的工具属性&#xff0c;让人更简单的理解计算机和更简…

基于单片机的水位检测系统仿真

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机&#xff0c;DHT11温湿度采集温湿度&#xff0c;滑动变阻器连接ADC0832数模转换器模拟水位传感器检测水位&#xff0c;通过LCD1602显示信息&#xff0c;然后在程序里设置好是否…

C#核心(2)类和对象

前言 在上一节中&#xff0c;我们已经了解了面向对象开发的概念和原则&#xff0c;那今天&#xff0c;我们就来讲讲c#中的类。 c#中的类是我们面向对象开发使用最频繁的东西。 在未来我们要学习的unity开发中也是必不可少的。 所以希望屏幕前的你务必把这一块的知识学得扎实…

【文件增量备份系统】MySQL百万量级数据量分页查询性能优化

&#x1f3af; 导读&#xff1a;本文针对大数据量下的分页查询性能问题进行了深入探讨与优化&#xff0c;最初查询耗时长达12秒&#xff0c;通过避免全表计数及利用缓存保存总数的方式显著提升了浅分页查询速度。面对深分页时依然存在的延迟&#xff0c;采用先查询倒数第N条记录…

时间序列LSTM实现

这个代码参考了时间序列预测模型实战案例(三)(LSTM)(Python)(深度学习)时间序列预测(包括运行代码以及代码讲解)_lstm预测模型-CSDN博客 结合我之前所学的lstm-seq2seq里所学习到的知识对其进行预测 import time import numpy as np import pandas as pd import torch import…

Meta Sapiens 人体AI模型

Meta 一直是开发图像和视频模型的领导者&#xff0c;现在他们又增加了一个新东西&#xff1a;Meta Sapiens。和Homo sapiens一样&#xff0c;这个模型也是关于人类的。它旨在执行与人类相关的任务&#xff0c;例如理解身体姿势、识别身体部位、预测深度&#xff0c;甚至确定皮肤…

算法课习题汇总(3)

循环日程表 设有N个选手进行循环比赛&#xff0c;其中N2M&#xff0c;要求每名选手要与其他N−1名选手都赛一次&#xff0c;每名选手每天比赛一次&#xff0c;循环赛共进行N−1天&#xff0c;要求每天没有选手轮空。 例如4个人进行比赛&#xff1a; 思路&#xff1a; 把表格…