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

news2024/11/16 15:33:02

 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.coloradmin.cn/o/2170920.html

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

相关文章

RTMP播放器全解析

一、RTMP 播放器概述 &#xff08;一&#xff09;RTMP 播放器的定义与作用 RTMP 播放器是一种专门用于播放采用 RTMP&#xff08;Real Time Messaging Protocol&#xff09;协议的视频流的工具。在当今的流媒体播放领域中&#xff0c;它扮演着至关重要的角色。RTMP 播放器能够…

找不到d3dx9_43.dll怎么办,d3dx9_43.dll丢失的多种解决方法

在现代计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到d3dx9_43.dll,无法继续执行代码”。这个错误提示通常出现在运行某些游戏或应用程序时&#xff0c;它会导致程序无法正常运行。本文将针对这个问题进行原因分析&#xff0c;并提供…

Ubuntu18升级cmake和python

Ubuntu18升级cmake和python 1、升级cmake至3.22.12、升级python至3.82.1 安装依赖包2.2 添加deadsnakes PPA源2.3 安装python3.82.4 将python各版本添加到update-alternatives2.5 配置python3默认指向python3.82.6 测试python3版本2.7 配置python默认指向python32.8 测试python…

《面向对象是怎样工作的》笔记

6、1、在面向对象的世界中&#xff0c;我们需要事先为所有的行动准备好方法并通过消息传递来调用方法&#xff0c;这样事物才会开始运作。 2、实际上&#xff0c;类、继承和多态应该被明确定义为能提高软件的可维护性和可重用行的结构。类将变量和子程序汇总在一起&#xff0c…

叉车高位显示器无线摄影,安装更加便捷!

叉车叉货&#xff0c;基本功能&#xff0c;但货叉升降高度确不一定&#xff0c;普通的3米左右&#xff0c;高的十几米&#xff0c;特别是仓储车&#xff0c;仓库叉货空间小&#xff0c;环境昏暗&#xff0c;视线受阻严重&#xff0c;司机叉货升的那么高怎么准确无误的插到货呢&…

尊享免费博导实验指导、结果解读、一站式实验服务与论文润色,助力科研人员成就卓越

&#x1f31f; 教授团队领衔&#xff0c;全方位服务&#xff01; &#x1f680; 从实验设计到论文发表&#xff0c;一站式解决方案&#xff01; &#x1f4c8; 选择我们&#xff0c;加速您的科研进程&#xff0c;让成果不再等待&#xff01; &#x1f4dd; 专业分析 定制服…

C高级(Day21)

一、学习内容 shell指令 学习回顾 mkdir 创建目录 cd 切换目录 cd \ cd . \ cd .. touch 、 vim 创建文件 rm 删除文件 rm -r 删除文件/删除目录 rmdir 只能删除空目录 cp 复制文件 mv 移动、重命名、剪切 cat 显示文件内容 ls 查看目录下的所有文件 ls -a 、ls -l pw…

kali的tplmap使用报错解决

问题 当我们直接使用kali下的tplmap时报错了。 Tplmap 0.5 Automatic Server-Side Template Injection Detection and Exploitation Tool Testing if GET parameter name is injectable Exiting: module collections has no attribute Mapping 这是因为tplmap要求的版本…

USB 3.1 标准 A 型到 USB 3.1 标准 A 型或 B 型的电缆组件

电线分配 下表定义了电线编号和电线的信号分配&#xff1a; Unshielded twist pair&#xff1a;非屏蔽双绞线Shielded differential pair&#xff1a;屏蔽差分对Braid&#xff1a;编织层Cable external braid to be 360 terminated on to plug metal shell&#xff1a;电缆外部…

文笔差只因没找对工具,这5个AI帮你变身写作高手!

在详细评估了超过二十种AI写作辅助应用后&#xff0c;我挑选了四款特别出色的工具来向您介绍。这些工具不仅能显著提高您的写作速度&#xff0c;而且在特定用途下能够创造出优秀的内容&#xff0c;从而避免了一些常见的AI写作缺陷。 通常情况下&#xff0c;对AI生成内容感到不…

8--苍穹外卖-SpringBoot项目中套餐管理 详解(二)

目录 删除套餐 需求分析和设计 代码开发 根据id查询套餐 mapper层 Service层 ServiceImpl层 Mapper层 批量删除套餐 mapper层 Service层 ServiceImpl层 Mapper层 SetmealMapper.xml 修改套餐 需求分析和设计 代码开发 起售停售套餐 需求分析和设计 代码开发…

【智享AI直播官网】—智享AI直播源码部署—OEM贴牌!

【智享AI直播官网】—智享AI直播源码部署—OEM贴牌&#xff01; 在当今数字化浪潮的推动下&#xff0c;直播行业正以前所未有的速度蓬勃发展&#xff0c;而AI&#xff08;人工智能&#xff09;技术的融入更是为这一领域注入了新的活力与无限可能。【智享AI直播官网】作为行业内…

gMLP:Pay Attention to MLPs--模型代码讲解

gMLP模型代码讲解 IntroductiongMLP网络结构Spatial Gating Unit (SGU) codegMLPBlockSpatial Gating Unit 基于MLP-Mixer 的改进… Introduction 总的来说&#xff0c;gMLP 在视觉和NLP领域的惊人有效性表明&#xff0c;自我注意并不是扩大机器学习模型的必要因素&#xff0c…

基于STM32的DHT11功能实现(操作时序)

1.引脚定义 Pin名称注释1VDD供电 3-5.5V2GND接地&#xff0c;电源负极3DATA串行数据&#xff0c;单总线4NC空脚&#xff0c;请悬空 2.数据格式 DHT11 采用单总线协议与单片机通信&#xff0c;单片机发送一次复位信号后&#xff0c;DHT11 从低功耗模式转换到高速模式&#xff…

新品:新一代全双工音频对讲模块SA618F22-C1

SA618F22-C1是我司一款升级版的无线数字和音频二合一全双工传输模块&#xff0c;支持8路并发高音质通话。用户不仅可以通过串口实现数据的无线传输&#xff0c;还可以通过I2S数字音频或模拟音频接口来传输语音信号。该模块内置高速微控制器、回声消除电路、ESD静电防护、高性能…

全国自闭症学校全寄宿制:为特殊儿童提供专业教育护理

在全国范围内&#xff0c;随着对自闭症儿童教育需求的日益增长&#xff0c;全寄宿制自闭症学校逐渐成为了一种重要的教育模式。这些学校以其专业的教育团队、全面的生活护理以及个性化的教学方案&#xff0c;为自闭症儿童提供了一个安全、稳定、充满爱的成长环境。在广州&#…

走进灯塔工厂,腾讯云携手业界专家共筑AI智造未来

现在&#xff0c;我国工业正处于从数字化向智能化转型的关键阶段&#xff0c;而人工智能、云计算和大数据等前沿技术正成为推动这进程的核心力量。以大模型为例&#xff0c;大模型通过高效处理和分析海量数据&#xff0c;帮助企业挖掘出有价值的规律和趋势&#xff0c;有效拓展…

使用双向链表和哈希表实现LRU缓存

在日常开发中&#xff0c;缓存 是一个非常常见且重要的技术手段&#xff0c;能够显著提升系统性能。为了保证缓存的有效性&#xff0c;需要实现一种机制&#xff0c;在缓存空间不足时&#xff0c;能够自动淘汰最久未被使用的数据。这种机制就是**LRU&#xff08;Least Recently…

CSS文本格式化

通过 CSS 中的文本属性您可以像操作 Word 文档那样定义网页中文本的字符间距、对齐方式、缩进等等&#xff0c;CSS 中常用的文本属性如下所示&#xff1a; text-align&#xff1a;设置文本的水平对齐方式&#xff1b;text-decoration&#xff1a;设置文本的装饰&#xff1b;te…

面试题-部分

目录 1. 从输入url到渲染页面&#xff0c;中间经历了什么&#xff1f; 2. vue中的v-if和v-show有什么区别 3. 什么是Css中的回流&#xff08;重排&#xff09;与重绘 4. 介绍一下let、const、var的区别 5. 箭头函数和普通函数有什么区别 6. Css中常用的水平垂直居中解决方…