当前位置: 首页 > ds >正文

逆向入门(8)汇编篇-rol指令的学习

还是那个题,这回又碰到个循环左移,有挺多操作方法之前都没有系统的学,用到的时候再看看感觉还挺好,不耽误事

0x00 基本介绍

ROL(Rotate Left): 循环左移,它有两个操作数:

  • 第一个操作数是目标操作数,这里为 eax32位寄存器)。

  • 第二个操作数指定循环移位的次数,这里为 cl8位寄存器,是ecx的低8位)。

指令格式:rol dest, count

该指令的功能是将 eax 中的值循环左移 cl 寄存器中指定的位数。循环左移的意思是,移出的位不仅会进入进位标志(CF),而且还会从右侧移入。

0x01 实践

push eax,0xD7E1825A
push ecx,1
rol eax,cl

最后eax的值是0xAFC304B5

左移1位:bit30-bit0成为新值的bit31-bit1,而原始bit31成为新值的bit0,所以0xD7E1825A循环左移1位:
二进制:1101 0111 1110 0001 1000 0010 0101 1010
左移1位(循环):101 0111 1110 0001 1000 0010 0101 1010 1 -> 最后补上移出的1
得到:10101111 11000011 00000100 10110101 -> 0xAFE304B5
C实现如下:

#include <stdio.h>
#include <stdint.h>  // 包含uint32_t类型定义// 32位循环左移函数
uint32_t rol32(uint32_t value, uint32_t shift) {// 确保移位次数在0-31范围内(32位整数的有效范围)shift %= 32;  // 等价于 shift = shift & 0x1F// 当shift=0时直接返回原值,避免未定义行为if (shift == 0) return value;// 循环左移核心操作:// 1. 将value左移shift位(高位被移出)// 2. 将value右移(32 - shift)位(获取被移出的高位)// 3. 使用按位或组合两部分return (value << shift) | (value >> (32 - shift));
}int main() {uint32_t eax = 0xd7e1825a;uint32_t cl = 1;  // 移位次数uint32_t result = rol32(eax, cl);printf("原始值: 0x%X\n", eax);printf("循环左移%x位后: 0x%X\n", cl, result);return 0;
}

在这里插入图片描述

0x02 扩展

ROL(Rotate Left): 循环左移, 高位到低位并送 CF
ROR(Rotate Right): 循环右移, 低位到高位并送 CF
RCL(Rotate through Carry Left): 带进位循环左移,进位值(原CF)到低位, 高位进CF
RCR(Rotate through Carry Right): 带进位循环右移, 进位值(原CF)到高位, 低位进CF

以RCR举例操作数:32位寄存器(如 EAX)移位次数:由 CL 寄存器指定移位过程:1、最低位移入进位标志(CF)2、原进位标志(CF)移入最高位(MSB)3、中间位依次右移移位范围:0-31 位标志位影响:CF:设置为最后移出的位OF:当移位次数=1时,设置为最高两位的异或;否则无定义
http://www.xdnf.cn/news/14815.html

相关文章:

  • Boss:攻击
  • IoT/HCIP实验-5/基于NB-IoT的智慧农业实验(平台侧开发+端侧编码+基础调试分析)
  • 数据驱动的农产品供应链管理:让“菜篮子”更智慧、更高效
  • aspose.word在IIS后端DLL中高并发运行,线程安全隔离
  • 【Lua 基础学习】
  • 惯性导航——陀螺仪
  • Web层注解
  • 南北差异之——理解业务和理解产品
  • spring中的@Cacheable缓存
  • Python零基础入门到高手8.5节: 实现选择排序算法
  • 个人博客网站(halo)在云服务器的快速部署
  • 深入学习入门--(一)前备知识
  • 创客匠人联盟生态:重构家庭教育知识变现的底层逻辑
  • spring boot项目整合百度翻译
  • MySQL之SQL性能优化策略
  • Serverless架构下的OSS应用:函数计算FC自动处理图片/视频转码(演示水印添加+缩略图生成流水线)
  • 15.OCR训练
  • 宝塔服务器调优工具 1.1(Opcache优化)
  • day041-web集群架构搭建
  • 轨迹降噪API及算法
  • SQL Server 查询数据库及数据文件大小
  • 利用folium实现全国高校分布地图显示
  • 【深度学习】-学习篇(一)
  • MySQL深分页性能瓶颈:问题分析与解决方案
  • 第十节 新特性与趋势-CSS层叠规则升级
  • 第九节 CSS工程化-预处理技术对比
  • 【TCL 脚本学习 4 -- tcl 脚本 数组定义和使用】
  • 基于 SpringBoot+JSP 的医疗预约与诊断系统设计与实现
  • 【第二章:机器学习与神经网络概述】03.类算法理论与实践-(1)逻辑回归(Logistic Regression)
  • 【软考高级系统架构论文】论边缘计算及其应用