逆向-还原代码之除法 (Interl 64)

news2024/9/24 5:20:49

       除法和32位差不多,毕竟背后的数学公式是一样的。区别只是32位的乘法需要两个寄存器来存放大数相乘的结果,而64位的不需要,一个寄存器就能存下。所以在64位的环境下,多了右移32位这条指令,其他指令一样。

//code

#include <stdio.h>

void i_c_c()
{
    int num = 1234;
    int bit = 0;
    
    bit = num / 1000;
    printf("bit = %d %d\n", bit, 1234 % 1000);  // 1 234   
}

int main()
{
    i_c_c();

    return 0;
}

// asm

#include <stdio.h>

void i_c_c()
{
    /*1149:    f3 0f 1e fa              endbr64
    114d:    55                       push   %rbp
    114e:    48 89 e5                 mov    %rsp,%rbp
    1151:    48 83 ec 10              sub    $0x10,%rsp
    1155:    c7 45 f8 d2 04 00 00     movl   $0x4d2,-0x8(%rbp)*/
        int a = 1234;

    /*115c:    c7 45 fc 00 00 00 00     movl   $0x0,-0x4(%rbp)*/
        int b = 0;

    /*1163:    8b 45 f8                 mov    -0x8(%rbp),%eax            // eax = 1234
    1166:    48 63 d0                 movslq %eax,%rdx                // rdx = 1234
    1169:    48 69 d2 d3 4d 62 10     imul   $0x10624dd3,%rdx,%rdx    // rdx = 1234*274877907 =339199337238 = 0x4E F9DB 2316
    1170:    48 c1 ea 20              shr    $0x20,%rdx                // rdx = 0x4E
    1174:    c1 fa 06                 sar    $0x6,%edx                // edx = 1    (2^38)/274877907 = 999.9999 = 1000
    1177:    c1 f8 1f                 sar    $0x1f,%eax                // eax = 0
    117a:    29 c2                    sub    %eax,%edx                // edx = 1
    117c:    89 d0                    mov    %edx,%eax                // edx = 1
    117e:    89 45 fc                 mov    %eax,-0x4(%rbp)*/
        b = a / 1000;

    /*1181:    8b 45 fc                 mov    -0x4(%rbp),%eax            // eax = 1
    1184:    ba ea 00 00 00           mov    $0xea,%edx                // edx = 0xea
    1189:    89 c6                    mov    %eax,%esi
    118b:    48 8d 3d 72 0e 00 00     lea    0xe72(%rip),%rdi        # 2004 <_IO_stdin_used+0x4>
    1192:    b8 00 00 00 00           mov    $0x0,%eax
    1197:    e8 b4 fe ff ff           callq  1050 <printf@plt>*/
        printf("%d %d\n", b, 0xea);

    /*119c:    90                       nop
    119d:    c9                       leaveq
    119e:    c3                       retq   */
}

int main()
{
    /*119f:    f3 0f 1e fa              endbr64
    11a3:    55                       push   %rbp
    11a4:    48 89 e5                 mov    %rsp,%rbp
    11a7:    b8 00 00 00 00           mov    $0x0,%eax
    11ac:    e8 98 ff ff ff           callq  1149 <i_c_c>*/
        i_c_c();

    /*11b1:    b8 00 00 00 00           mov    $0x0,%eax
    11b6:    5d                       pop    %rbp
    11b7:    c3                       retq   
    11b8:    0f 1f 84 00 00 00 00     nopl   0x0(%rax,%rax,1)
    11bf:    00 */

    return 0;
}

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

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

相关文章

升级Android Studio Electric Eel问题汇总

1.升级以后找不到java可执行程序 问题原因&#xff1a;升级后&#xff0c;Android Studio自带的java目录不再是根目录/jre&#xff0c;调整为一个新目录 Studio根目录/jbr 修改方法&#xff1a;1&#xff09;修改系统环境变量&#xff0c; JAVA_HOME调整为Studio下对应的java…

烟厂能耗控制管理系统_烟厂能源管理信息系统

烟厂也是能耗大厂&#xff0c;为了更好的让烟厂完成资源调配、成本核算、能耗统计等&#xff0c;需要建立一套有效的能源数据管理系统&#xff0c;对能源进行监测&#xff0c;自动获取能源信息&#xff0c;方便查看厂区能源实时情况。烟厂能耗控制管理系统是利用信息化技术手段…

java多线程(七)线程等待与唤醒

一、wait()、notify()、notifyAll()等方法介绍 在Object.java中&#xff0c;定义了wait(), notify()和notifyAll()等接口。wait()的作用是让当前线程进入等待状态&#xff0c;同时&#xff0c;wait()也会让当前线程释放它所持有的锁。而notify()和notifyAll()的作用&#xff0…

阶段十:总结专题(第六章:缓存篇)

阶段十&#xff1a;总结专题&#xff08;第六章&#xff1a;缓存篇&#xff09;Day-第六章&#xff1a;缓存篇1. Redis 数据类型**String****List****Hash****Sorted Set**2. keys 命令问题3. 过期 key 的删除策略4. Redis 持久化**AOF 持久化****AOF 重写****RDB 持久化****混…

值得关注!可控生成!近期diffusion图像生成进展!

猜您喜欢&#xff1a;深入浅出stable diffusion&#xff1a;AI作画技术背后的潜在扩散模型论文解读戳我&#xff0c;查看GAN的系列专辑~&#xff01;一顿午饭外卖&#xff0c;成为CV视觉的前沿弄潮儿&#xff01;最新最全100篇汇总&#xff01;生成扩散模型Diffusion ModelsECC…

JS中三种主要的遍历对象的方法:for in、Object.keys、Object.getOwnProperty

1、for in 主要用于遍历对象的可枚举属性&#xff0c;包括自有属性、继承自原型的属性 var obj {“name”:“tom”,“sex”:“male”}&#xff1b; Object.defineProperty(obj, “age”, {value:“18”, enumerable:false});//增加不可枚举的属性age Object.prototype.pro…

基于强化学习的多模态优化问题解空间聚类进化算法

Reinforcement-Learning-Based Evolutionary Algorithm Using Solution Space Clustering For Multimodal Optimization Problems 基于强化学习的多模态优化问题解空间聚类进化算法 摘要 在进化算法中&#xff0c;如何有效地选择用于生成后代的交互式解决方案是一个具有挑战性的…

《数据库系统概论》学习笔记——第二章 : 关系数据库

教材为数据库系统概论第五版&#xff08;王珊&#xff09; 这一章前面部分基本概念比较多&#xff0c;但学会对后面的学习有很大帮助。基本出题方向就是关于关系数据库的一些概念&#xff08;比较多&#xff09;&#xff0c;然后计算题基本必考关系代数&#xff0c;一些基本的问…

UEditorPlus v2.9.0发布 文档仓库开源,修复若干问题

UEditor是由百度开发的所见即所得的开源富文本编辑器&#xff0c;基于MIT开源协议&#xff0c;该富文本编辑器帮助不少网站开发者解决富文本编辑器的难点。 UEditorPlus 是有 ModStart 团队基于 UEditor 二次开发的富文本编辑器&#xff0c;主要做了样式的定制&#xff0c;更符…

Hbase资源隔离操作指南

1.检查集群的环境配置 1.1 HBase版本号确认> 5.11.0 引入rsgroup的Patch&#xff1a; [HBASE-6721] RegionServer Group based Assignment - ASF JIRA RegionServer Group based Assignment 社区支持版本&#xff1a;2.0.0 引入rsgroup的CDH版本 5.11.0 https://www.…

高通平台开发系列讲解(Sensor篇)Gsensor基础知识

文章目录 一、什么是SENSOR?二、Sensor的分类及作用三、Gsensor的工作原理及介绍3.1、常见Gsensor3.2、Gsensor的特性沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍 Sensor 基础 一、什么是SENSOR? 传感器(英文名称:sensor )是一种检测装置,能感…

【Windows】U盘用完不能直接拔的原因?

小时候刚开始学习使用电脑时&#xff0c;总是被告知&#xff0c;用完U盘之后&#xff0c;一定要在电脑上先安全弹出USB设备之后才能拔掉&#xff0c;那时候就一直不明白为什么要这么做&#xff0c;而且最气的是有时候点击了安全弹出&#xff0c;结果被告知“正在使用无法弹出”…

换了固态硬盘需要重装系统吗?教你如何实现不重装系统!

电脑大家都用过嘛&#xff0c;如果您的计算机装的还是机械硬盘&#xff0c;想必阁下肯定是修身养性的高手&#xff0c;因为在这个浮躁的社会中&#xff0c;是很少有人能够忍受5分钟甚至更久的开机时间的&#xff0c;不仅开机慢&#xff0c;应用程序的响应速度也很慢&#xff0c…

STM32开发(16)----CubeMX配置DMA

CubeMX配置DMA前言一、什么是DMA&#xff1f;二、实验过程1.CubeMX配置2.代码实现3.实验结果总结前言 本章介绍使用STM32CubeMX对DMA进行配置的方法&#xff0c;DMA的原理、概念和特点&#xff0c;配置各个步骤的功能&#xff0c;并通过串口DMA传输实验方式验证。 一、什么是…

华为OD机试题,用 Java 解【最短耗时】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

关于IB学习,大学申请需要了解什么?

越来越多的孩子选择高中上IB课程&#xff0c;然而在IB学习中&#xff0c;会遇到很多问题&#xff0c;尤其是大学申请的问题&#xff0c;很多人还不是很了解。这里小编给大家整理了详细的解答。另外&#xff0c;还罗列了关于IB考试之后的相关问题&#xff0c;希望都能帮到学习IB…

pytorch入门6--数据分析(pandas)

pandas是基于Numpy构建的&#xff0c;提供了众多比NumPy更高级、更直观的数据处理功能&#xff0c;尤其是它的DataFrame数据结构&#xff0c;可以用处理数据库或电子表格的方式来处理分析数据。 使用Pandas前&#xff0c;需导入以下内容&#xff1a; import numpy as np from …

数据结构与算法之冒泡排序(含改进版)

目录冒泡排序概念代码实现时间复杂度代码改进冒泡排序概念 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法。它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再…

产品新说 | 指标的异常检测怎么做,能更好配合业务变化(二)

前言&#xff1a;上期分享我们提到了指标异常检测实践要素中的三个方面&#xff1a;以面对业务变动为前提&#xff0c;确定业务波动是周期性还是非周期性&#xff0c;进而选对算法&#xff1b;通过确认业务的常规指标&#xff0c;确定异常方向进行监测&#xff08;上基带 / 下基…

【夏虫语冰】Win10局域网下两台电脑无法ping通: 无法访问目标主机

文章目录1、简介2、修改高级共享设置3、启用防火墙规则4、局域网内的其他主机访问NAT模式下的虚拟机4.1 虚拟机网络设置4.2 访问测试4.2.1 http测试4.2.2 curl测试4.2.3 telnet测试4.2.4 端口占用测试5、其他结语1、简介 ping 192.168.31.134ping主机ip时&#xff0c;访问无法…