c++反汇编逆向还原指令jge jg jle jl jne je

news2024/9/25 14:16:49

 c++反汇编逆向还原jge jg jle jl jne je所还原的c++代码

 c++反汇编逆向还原,if语句、赋值、算数|逻辑运算符(> 、>=、==、<、<=、if中的&&、!、||) 

在汇编指令中

jge 前面>=后面

jg   前面>后面

jle  前面<=后面

jl    前面<后面

jne 前面不等于后面

je   前面等于后面

记忆技巧  e :equal 相等         g:greater  大         l:less  小

虽然汇编指令是这样

但是因为 如果cmp 对应的jnz 等 的条件成立为true,则执行绿色的线,否则则执行红色的线

参考下方的图,所以我们在还原代码时要反过来

比如都是 cmp a,b

jge 前面>=后面         翻译  if(a<b){}else{}

jg   前面>后面           翻译  if(a<=b){}else{}

jle  前面<=后面         翻译  if(a>b){}else{}

jl    前面<后面           翻译  if(a>=b){}else{}

jne 前面不等于后面  翻译  if(a==0{}else{}

je   前面等于后面      翻译  if(a!=b){}else{}

 

1.赋值

mov:传送指令,用于传送字或字节

示例:

mov a,b     把b赋值给a所在的地址

mov a,[b]   把b的地址赋值给a所在的地址 注意有没有[] 的区别 []类似指针的取址操作

还原:

mov     [ebp+a], 0Ah
mov     [ebp+b], 14h

翻译成c++

int ebp_a=0xa;

int ebp_b=0x14;

2. 等于==

cmp指令 比较指令   jnz表示结果不为0,则执行loc_411938   两个数比较结果不为0表示false

    int ebp_a=0xa;
    int ebp_b=0x14;
    int eax=ebp_a; 
    if(eax==ebp_b){
        printf("yes =\n");
    }

 3.小于&小于等于 jg、jge

jge 表示cmp前的大于等于后面 则执行绿色的线,否则执行红色线 Jump if greater or equal

int eax=ebp_a;
if(eax>=ebp_b){
    loc_41194D();
}else{

    printf("yes <\n");

}
所以jge可以翻译为

mov     eax, [ebp+a]
cmp     eax, [ebp+b]

if(eax<ebp_b){}

e表示equal 相等

mov     eax, [ebp+a]
cmp     eax, [ebp+b]

jg      short loc_411962

那么jg则表示 cmp前的大于后面 则执行绿色的线

所以逆向反过来就是

if(eax<=ebp_b){}

4.大于&大于等于  jle、jl

通过上面我们已经知道实际翻译的代码要与指令相反

jle 前面<=后面

jl  前面<后面

所以

jle则为

if(eax>ebp_b){}

jl则为

if(eax>=ebp_b){}

 4.逻辑运算符 &&、||、!

if语句中的逻辑运算符,直接根据反汇编代码的意思原原本本还原,再自己转化成使用逻辑运算符的形式即可 

在汇编中还有专门的逻辑运算指令

xor a,b  对a,b进行异或运算

or a,b   对a,b进行或运算

not a      对进行取反操作

and a,b 对a,b进行与运算

4.1 && 且

可以看到&&是有两个cmp才push输出的

 这里按照汇编原原本本翻译过来就是

    if(ebp_a!=0xa){
    }else{
        if(ebp_b!=0x14){
            
        }else{
            printf("yes");
        }
    }

按照正常写代码翻译则为

    if(ebp_a==0xa){
        if(ebp_b==0x14){
            printf("yes &&");
        }
    }

所以可以翻译为

    if(ebp_a==0xa&&ebp_b==0x14){
        printf("yes &&");
    }

4.2 || 或

同理 ||也是两个cmp   

这里可以翻译为

    if(ebp_a==0xa){
        printf("yes ||");
    }else{
        if(ebp_b==0x14){
            printf("yes ||");
        }
    }

正常翻译可以写为

if(ebp_a==0xa||ebp_b==0x14){
        printf("yes ||");
    }

4.3 ! 非

翻译过来就是 

if(ebp_a!=0xa){
     print("yes");

        

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

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

相关文章

从零开始学习Python

目录 从零开始学习Python 引言 环境搭建 安装Python解释器 选择IDE 基础语法 注释 变量和数据类型 变量命名规则 数据类型 运算符 算术运算符 比较运算符 逻辑运算符 输入和输出 控制流 条件语句 循环语句 for循环 while循环 循环控制语句 函数和模块 定…

酒店智能插座有什么用途

作为提升住宿体验的关键一环&#xff0c;酒店智能插座正以其独特的功能和便捷性&#xff0c;悄然改变着旅客的居住体验。本文将深入探讨酒店智能插座的多种用途。 一、能源管理与节能减排 酒店智能插座首要的功能之一在于其强大的能源管理能力。通过内置的传感器和智能算法&…

低成本搭建企业专属云电脑 贝锐向日葵推出私有化云电脑服务

作为一种硬件虚拟化技术&#xff0c;云电脑的优势是十分显著的&#xff0c;比如可以随时随地访问&#xff0c;拥有较高的性能、无需我们购买昂贵的实体硬件、计算资源可以按需灵活拓展等等。 如今&#xff0c;越来越多的企业也开始认识到云电脑所带来的优势&#xff0c;将云电…

软考(9.22)

1 在浏览器的地址栏中输入xxxyftp.abc.can.cn&#xff0c;在该URL中( )是要访问的主机名。 A.xxxyftp B.abc C.can D.cn 协议://主机名.域名.域名后缀或IP地址(:端口号)/目录/文件名。 本题xxxyftp是主机名&#xff0c;选择A选项。 2 假设磁盘块与缓冲区大小相同&#xff0c;…

DAMODEL丹摩智算平台实践CogVideoX

文章目录 前言 一、平台账号注册并登录 二、部署CogVideoX &#xff08;一&#xff09;简介 &#xff08;二&#xff09;部署 1. 创建实例 2. 配置环境和依赖 3.预制模型与配置文件 三、开始运行 总结 前言 该文章主要记录DAMODEL丹摩智算平台实践过程与心得体会&…

【自动化测试】Appium Server如何安装和Appium Server安装困难的原因和解决方法以及常见的一些安装失败的错误和解决方法

引言 Appium Server安装过程时常出现问题&#xff0c;以下是安装Appium Server过程一些原因、常见错误和解决方法 文章目录 引言一、Appium Server如何安装1.1 Node.js 安装1.2 使用NPM安装Appium1.3 验证Appium安装1.4 运行Appium Server1.5 使用Appium Desktop&#xff08;可…

QT C++ 自学积累 『非技术文』

QT C 自学积累 『非技术文』 最近一段时间参与了一个 QT 项目的开发&#xff0c;使用的是 C 语法&#xff0c;很遗憾的是我之前从来没有接触过 C &#xff0c;大学没有开过这堂课&#xff0c;也没用自己学习过&#xff0c;所有说上手贼慢&#xff0c;到现在为止其实也不是很清楚…

经纬恒润全冗余R-EPS助力L4级自动驾驶落地

随着L4级别自动驾驶技术的逐步成熟与商业化进程加速&#xff0c;行业对车辆安全性的要求达到了新的高度。为了确保自动驾驶车辆全天候、全路况下安全运行&#xff0c;冗余系统的研发与应用成为关键。在这一背景下&#xff0c;经纬恒润开发了齿条式全冗余电动助力转向系统R-EPS&…

Spring Boot 进阶- Spring Boot入门程序详解

在上篇文章中,我们创建了一个RESTFul风格的接口项目,并且分析了它的相关依赖,这里我们就来看一下这个项目还有什么值得我们分析的地方。前面提到的,在SpringBoot的场景启动器中,我们提供了一些自动配置的功能,那么在之前我们也说过,这些自动配置,除了可以自动配置之外,…

基于springboot在线点餐系统

基于springbootvue实现的点餐系统 &#xff08;源码L文ppt&#xff09;4-077 第4章 系统设计 4.1 总体功能设计 一般个人用户和管理者都需要登录才能进入点餐系统&#xff0c;使用者登录时会在后台判断使用的权限类型&#xff0c;包括一般使用者和管理者,一般使用…

【C++】stack和queue的使用及模拟实现

stack就是栈的意思&#xff0c;这个结构遵循后进先出(LIFO)的原则&#xff0c;可以将栈想象为一个子弹夹&#xff0c;先进去的子弹后出来。 queue就是队列的意思&#xff0c;这个结构遵循先进先出(FIFO)的原则&#xff0c;可以将对列想象成我们排队买饭的场景&#xff0c;先排…

Java Web应用升级故障案例解析

在一次Java Web应用程序的优化升级过程中&#xff0c;从Tomcat 7.0.109版本升级至8.5.93版本后&#xff0c;尽管在预发布环境中验证无误&#xff0c;但在灰度环境中却发现了一个令人困惑的问题&#xff1a;新日志记录神秘“失踪”。本文深入探讨了这一问题的排查与解决过程&…

一份在阿里内网悄悄流传的大模型面试真题!(2024年最新)

随着人工智能技术的迅猛发展&#xff0c;计算机视觉&#xff08;CV&#xff09;、自然语言处理&#xff08;NLP&#xff09;、搜索、推荐、广告推送和风险控制等领域的岗位越来越受欢迎&#xff0c;而对于大型模型技术的掌握成为了这些岗位的标配。 但目前公开的大模型资源还是…

FAT32取证分析

前言&#xff1a; 在正常工作中经常会有数据恢复或者取证分析的场景&#xff0c;数据是否能被恢复&#xff0c;主要还是看数据是否被覆盖&#xff0c;正常情况下文件虽然被删除&#xff0c;只是修对应的标志位&#xff0c;文件本身数据并不会被破坏&#xff0c;所以我们就可以…

Chrome截取网页全屏

1.使用Chrome开发者工具 Chrome自带的开发者工具&#xff0c;可以进行网页整页截图&#xff0c; 首先打开你想截图的网页&#xff0c; 然后按下 F12,调出开发者工具&#xff0c; 接着按Ctrl Shift P。 紧接着输入指令 capture&#xff0c; 它会提示有三个选项&#xff0c;如…

应用层 IV(万维网WWW)【★★】

&#xff08;★★&#xff09;代表非常重要的知识点&#xff0c;&#xff08;★&#xff09;代表重要的知识点。 一、WWW 的概念与组成结构 1. 万维网的概念 万维网 WWW&#xff08;World Wide Web&#xff09;并非某种特殊的计算机网络。万维网是一个大规模的、联机式的信息…

echarts y轴滚动(react版本)

目录 效果图如下&#xff0c;代码见下方 代码可以直接复制&#xff0c;图片和css也要复制 tsx代码 css代码 代码里用到的图片&#xff0c;可以换成自己项目的图 效果图如下&#xff0c;代码见下方 代码可以直接复制&#xff0c;图片和css也要复制 tsx代码 import React,…

Leetcode 1396. 设计地铁系统

1.题目基本信息 1.1.题目描述 地铁系统跟踪不同车站之间的乘客出行时间&#xff0c;并使用这一数据来计算从一站到另一站的平均时间。 实现 UndergroundSystem 类&#xff1a; void checkIn(int id, string stationName, int t) 通行卡 ID 等于 id 的乘客&#xff0c;在时间…

自动化测试常用函数:元素定位、操作与窗口管理

目录 一、元素的定位 1. cssSelector 2. xpath 2.1 获取HTML页面所有的节点 2.2 获取HTML页面指定的节点 2.3 获取一个节点中的直接子节点 2.4 获取一个节点的父节点 2.5 实现节点属性的匹配 2.6 使用指定索引的方式获取对应的节点内容 二、操作测试对象 1. 点击/提交…

多个ECU测试方案-IP地址相同-DoIP刷新-环境测试耐久测试

情况1&#xff1a;只有一个ECU进行测试 - 接口模块只需要使用一个车载以太网转换器&#xff1b; 情况2&#xff1a;多ECU同时测试&#xff0c;但ECU IP地址不一样&#xff0c;上位机多个网口 - 上位机测试软件&#xff0c;需要通过PC的不同网卡&#xff0c;访问各个ECU&#…