当前位置: 首页> 娱乐> 八卦 > 乐清市网站建设服务_个人怎么建立公众号_网络运营推广_百度应用商店app下载安装

乐清市网站建设服务_个人怎么建立公众号_网络运营推广_百度应用商店app下载安装

时间:2025/7/15 10:22:58来源:https://blog.csdn.net/qq_37454479/article/details/142598133 浏览次数:0次
乐清市网站建设服务_个人怎么建立公众号_网络运营推广_百度应用商店app下载安装

 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的所有数字的和

 可以看到还原成功

关键字:乐清市网站建设服务_个人怎么建立公众号_网络运营推广_百度应用商店app下载安装

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: