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.xdnf.cn/news/1548170.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构中的哈希】

泛黄的春联还残留在墙上.......................................................................................................... 文章目录 前言 一、【哈希结构的介绍】 1.1【哈希结构的概念】 1.2【哈希冲突】 1.3【哈希函数的设计】 1.4【应对哈希冲突的办法】 一、…

MapReduce学习与理解

MapReduce为google分布式三驾马车之一。分别为《The Google File System》、《MapReduce: Simplified Data Processing on Large Clusters》、《Bigtable: A Distributed Storage System for Structured Data》。三遍论文奠定了分布式存储和计算的基础。本篇文章来说说mapreduc…

C语言 15 预处理

C 语言学习已经快要接近尾声了&#xff0c;但是有一个东西迟迟还没有介绍&#xff0c;就是一直在写的&#xff1a; #include <stdio.h>这到底是个什么东西&#xff0c;为什么每次都要加上呢&#xff1f;这里将详细讨论它缘由。 C 语言中带 # 号的指令并不是 C 关键字的…

ASCII Unicode UTF-8 字符集 字符编码

ASCII Unicode UTF-8 字符集 字符编码 基本概念字符字符集字符编码 字符集和字符编码ASCII 字符集Unicode 字符集UTF-8 附录 基本概念 字符集为每个字符分配了一个唯一的编号&#xff0c;通过这个编号就能找到对应的字符。在编码过程中我们经常会使用字符&#xff0c;而使用字…

【工具分享】FONIX勒索病毒解密工具

前言 FONIX勒索软件首次出现在2020年6月&#xff0c;并迅速成为勒索即服务&#xff08;RaaS&#xff09;平台的一部分。尽管它最初的影响力有限&#xff0c;FONIX从2020年11月开始显著增加了攻击频率。FONIX以其复杂的加密方法著称&#xff0c;使用了AES、Salsa20、ChaCha和RS…

阿博图书馆管理系统:SpringBoot实现细节

第三章 系统分析 通过对系统功能模块分析可以得知&#xff0c;主要是对项目元素组合、分解和更换做出相应的单元&#xff0c;再通过系统模块来规划出一个原则&#xff0c;系统的设计首先是围绕用户需求进行开发设计的&#xff0c;主要是为了能够更好的管理信息和方便用户&#…

002、视频格式转换

下载地址 http://www.pcfreetime.com/formatfactory/CN/index.html

高校教师成果管理小程序的设计与实现springboot(lw+演示+源码+运行)

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱&#xff0c;出错率高&#xff0c;信息安全…

怎么把word转化为ppt?这2款在线转换工具不容错过!

怎么把word文档转化为ppt&#xff1f; 在当今快节奏的办公日常中&#xff0c;高效处理文档格式转换已成为职场人必备的一项技能。当我们要进行演示报告、汇报工作&#xff0c;或是分享知识时&#xff0c;经常需要把Word文档转换为PPT演示文稿。然而&#xff0c;这个看似简单的…

「JavaScript深入」聊一聊 new操作符具体干了什么?

JavaScript深入 — new操作符 概念流程手写new操作符 概念 在JavaScript中&#xff0c;new 操作符用于创建一个给定构造函数的实例对象 function Person(name, age){this.name name;this.age age; } Person.prototype.sayName function () {console.log(this.name) } cons…

WT2605C蓝牙语音芯片智能对话模型 人机互动 让机械设备更智能

随着人工智能技术的飞速发展&#xff0c;AI语音芯片在机械设备领域的应用日益广泛。WT2605C作为一款集成了在线TTS&#xff08;Text-To-Speech&#xff0c;文本到语音&#xff09;功能的蓝牙语音芯片&#xff0c;凭借其卓越的性能和广泛的应用前景&#xff0c;为机械设备产品带…

C++简单缓冲区类设计

目录 1.引言 2.静态缓冲区 3.动态缓冲区 4.数据引用类 5.自动数据引用类 6.几种缓冲区的类关系图 7.注意事项 8.完整代码 1.引言 在C中&#xff0c;设计静态和动态缓冲区类时&#xff0c;需要考虑的主要差异在于内存管理的方式。静态缓冲区类通常使用固定大小的内存区域…

JAVA使用Scanner类的nextLint()方法无法正确读取中文。

在练习的时候&#xff0c;我发现我使用Scanner类的nextLint&#xff08;&#xff09;方法无法正确读取到中文了。检查了我的idea编辑器&#xff0c;用的编码格式也是”utf-8“。所以编码格式没有问题。 问题如下棉两张图所示&#xff0c;我输入宝马后&#xff0c;控制台不打印…

外包干了2年,收获不少。。。

有一种打工人的羡慕&#xff0c;叫做“大厂”。 真是年少不知大厂香&#xff0c;错把青春插稻秧。 但是&#xff0c;在深圳有一群比大厂员工更庞大的群体&#xff0c;他们顶着大厂的“名”&#xff0c;做着大厂的工作&#xff0c;还可以享受大厂的伙食&#xff0c;却没有大厂…

STM32F407单片机编程入门(二十七)以太网接口详解及实战含源码

文章目录 一.概要二.单片机以太网系统基本结构1.OSI 七层模型2.单片机实现以太网功能组成 三.STM32F407VET6单片机以太网内部结构1.MII接口介绍2.RMII接口介绍 四.LWIP TCP/IP协议栈介绍五.PHY收发器LAN8720介绍1.LAN8720内部框图2.LAN8720应用电路3.LAN8720以太网模块 六.Cube…

测试的底层逻辑

写这篇文章&#xff0c;是希望把我的一些我认为是非常有价值的经验总结出来&#xff0c;能够帮助刚做测试不久的新同事&#xff0c;或者是测试经验丰富的老同事以共享。希望我们可爱的新同事&#xff0c;准备要在测试领域耕耘的伙伴&#xff0c;能够通过我的文章了解到测试的底…

【智慧城市】新中地GIS开发实训项目:华农优秀学生学习成果展示(3)智游江城

华农GIS开发实训项目答辩③-智游江城/一个月学习成果展示 项目名称&#xff1a;智游江城 项目功能 主页面展示 菜单功能 控制台 3D城市 查询 导航 游览路线推荐 测量 资讯

Node的安装和配置

1、安装Node 下载nodejs 链接&#xff1a;下载 | Node.js 中文网 官网下载最新版本&#xff1a;https://nodejs.org/en/download/ 一路点击Next&#xff0c;最后Finish。nodejs一般会下载在C盘里。 下载完成后&#xff0c;可以在cmd中查看安装的nodejs和npm版本&#xff0c;…

【C++】红黑树的封装——同时实现map和set

目录 红黑树的完善默认成员函数迭代器的增加 红黑树的封装红黑树模板参数的控制仿函数解决取K问题对Key的非法操作 insert的调整map的[]运算符重载 在list模拟实现一文中&#xff0c;介绍了如何使用同一份代码封装出list的普通迭代器和const迭代器。今天学习STL中两个关联式容器…

lime使用记录

主要是对预测结果进行可解释 import numpy as np import pandas as pd from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import classification_re…