Win32反汇编(七)浮点指令(FLD / FILD / FSTP)与位移指令的逆向分析

前言

作者:浪子花梦,一个有趣的程序员 ~
此系列文章都是一些基础的文章,每篇文章都通过几个小例子快速的了解 Win32反汇编与OD的使用,在此作个笔记
如若对您有帮助,记得三连哟 ~


前文链接

Win32反汇编(一) 初步探索Win32反汇编 与 Ollydbg的简单使用
Win32反汇编(二)几种常见的指令反汇编详解:EAX、MOVSX与MOVZX、LEA、SUB、CMP与转移指令
Win32反汇编(三)深层次的了解各种转移指令:IF语句有符号与无符号跳转
Win32反汇编(四)栈的工作原理与堆栈平衡,函数方法参数的调用约定
Win32反汇编(五)C/C++中的 if-else 与 switch-case 的正向分析与反向分析
Win32反汇编(六)C/C++中的循环语句反汇编分析、置增置减反汇编分析与编译器的优化分析


文章目录

  • 浮点指令
  • 位移指令

浮点数在游戏中非常的重要,我们一定要好好的分析,才能找出重要的数据来 . . .


在这里插入图片描述

浮点指令

我们先来介绍一些常见的浮点指令,如下所示:

1)FLD 类似于 PUSH指令(存入数据到FPU中)
2)FSTP 类似于 POP指令(从FPU中取出数据)
3)FADD 类似于 ADD指令(fadd memvar // st0 = st0 + memvar)
4)FSUB 类似于 SUB指令
5)FMUL 乘法指令
6)FDIV 除法指令
7)FILD 指令(整数放入FPU中)
8)CVTTSD2SI r32,st0/m32 —— 浮点转整数指令(运用截断处理将 st0 / m32中的一个单精度浮点值转换成 r32中的一个有符号的双字整数)
9)movss 浮点数转移到 xmm寄存器中
10)addss 浮点数作加法
11)subss 浮点数作减法
12)mulss 浮点数作乘法
13)divss 浮点数作除法
14)cvttss2si 浮点数变整数

这些指令都是针对浮点数而言的,1 ~ 8 指令现在已经不常见了,但在某些程序中还是能看见的,我们主要讲讲下面的那几种简单的浮点运算指令 . . .

下面我们就会用个小例子来反分析一下汇编指令,如下所示,cpp程序的代码:

#include <cstdio>int main() {printf("start:\n");float f = 250.666666f;f = f + 249.333334f;		// 500.000000 f = f - 400.555555f;		// 99.444445;f = f * 3;f = f / 5;int n = f;printf("end!\n");return 0;
}

我们使用OD来调试,如下所示:
在这里插入图片描述
相关的注释我已经写好了,比较简单,我们需要注意的是 xmm0这个寄存器,他用于浮点数的运算与存储,以后我们看见 xmm0~7 类似的寄存器,它一定是进行浮点运算的 . . .

.
.


位移指令

位移也是一种常见的手段,通常用于扩大一个数 2^n倍,或者缩小 2^n倍,而位移指令又分为逻辑位移、算术位移、循环位移,又分为有符号与无符号,下面就让我们一为瞧一瞧吧 . . .

首先,我们先来介绍一下几种不同位移的区别:

1)逻辑位移指令:

  1. SHR 逻辑右移指令:右移一位相当于 / 2,用 0 补位
  2. SHL 逻辑左移指令:左移一位相当于 * 2,用 0 补位(可能会溢出)

2)算术位移指令:

  1. SAR 算术右移指令:SAR 与 SHR差不多,只不过用 符号位来补位
  2. SAL 算术左移指令:与 SHL 一样

3)循环位移指令:

  1. ROL 循环左移
  2. ROR 循环右移

下面我们来介绍一下逻辑位移,也就是无符号的位移,cpp代码如下所示:

#include <cstdio>int main(){printf("start:\n");unsigned int n = 0x88442211;n >>= 8;n <<= 8;printf("end!\n");return 0;
}

使用 OD反汇编这个程序如下所示:

在这里插入图片描述

当执行完 shr eax, 8 这条执行时,已经将 eax的值逻辑右移 8位了,它的值应该是 00884422,高位用 0补齐,如下所示:

在这里插入图片描述

当执行完 shl ecx, 8 这条执行时,已经将 ecx的值逻辑左移 8位了,它的值应该是 88442200,低位用 0补齐,如下所示:

在这里插入图片描述
.

这就是逻辑位移,下面我们来看看算术位移吧,cpp代码如下所示:

#include <cstdio>int main(){printf("start:\n");int n = 0x88442211;n >>= 8;n <<= 8;printf("end!\n");return 0;
}

使用 OD反汇编这个程序如下所示:

在这里插入图片描述

我们发现算术左移居然用的不是 SAL,因为上面说过他和 SHL的功能是一样的,下面我们来看看执行完 sar这条执行的结果吧,如下图所示:

在这里插入图片描述

我们发现它的结果由88442211 变成了 FF884422,因为 88442211的符号位是 1,所以将用 1来补所有的位,而下面使用 shl左移的功能是一样的,结果如下所示:
在这里插入图片描述

下面我们再来看看循环位移是什么样子的,cpp代码如下所示:

#include <cstdio>int main(){printf("start:\n");int n = 0x88442211;__asm {rol n, 16ror n, 16}printf("end!\n");return 0;
}

使用OD 调试如下所示:
在这里插入图片描述

演示效果如下所示,使用 dd命令查看数据:

在这里插入图片描述

我们发现最后的结果又回来了,出来混的,最终是要还的 . . .

.
.


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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django models Fild详解

本文参考自&#xff1a;django官方文档models/field 在model中添加字段的格式一般为&#xff1a; field_name field_type(**field_options) 一 field options(所有字段共用) 1 null 默认为False&#xff0c;True则表示可以为null。&#xff08;空字符串在数据库中可能被存…

SQlite3(轻型数据库)

1. main.m文件 #import <Foundation/Foundation.h> #import "SQLManger.h"int main(int argc, const char * argv[]) {autoreleasepool {// insert code here...NSLog("Hello, World!");SQLManger* sql [SQLManger shareSqlManger];[sql createTab…

我和ChatGPT聊了聊:它承认自己没有人性

我认为ChatGPT未来也许可以取代那些 重复 可以模板 固定公式 运作的工作 但是很难取代 定制化 人性化的工作 最近ChatGPT太火了&#xff0c;已经从好几个不同的渠道接触到了它&#xff0c;自然是整了一个去玩玩&#xff0c;零零散散问了它一些问题&#xff0c;答案还挺有意思的…

有了ChatGPT,还需要操作系统吗?|CCF C³

杨净 发自 凹非寺量子位 | 公众号 QbitAI 大模型引领的AI 2.0&#xff0c;远比想象来得更加猛烈。 尤其是被认为最先被颠覆的搜索引擎领域&#xff0c;产学研界都蠢蠢欲动&#xff0c;对可预见的趋势展开激辩。 没有了用户点击&#xff0c;内容提供商/广告该怎么办&#xff1f;…

震惊!外国小哥用ChatGPT完成80%工作,同时打4份工

【导读】自从ChatGPT火了以后&#xff0c;办公室白领可真是爽翻了。甭管什么任务&#xff0c;交给ChatGPT&#xff0c;准没错。 不少白领在工作中都用上了ChatGPT&#xff0c;堪称如虎添翼。 毕竟&#xff0c;很多工作都是重复的、有章可循的。 既然有了科技力量的加持&#xf…

ChatGPT会对未来5年的NLP算法从业者带来怎样的冲击?

周末看到知乎的一个问题&#xff0c;有点意思&#xff0c;值得NLPer思考&#xff0c;选取几个回答&#xff0c;欢迎留言。 问题&#xff1a;ChatGPT的诞生意味着模型大一统的可行性&#xff0c;这会对未来5年的NLP算法从业者带来怎样的冲击&#xff1f; 我个人从ChatGPT上看到了…

OpenAI 账户验证流程存在漏洞,可导致用户无限薅羊毛

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01; 编译&#xff1a;代码卫士 Checkmarx 公司指出&#xff0c;OpenAI 的账户验证流程中存在一个漏洞&#xff0c;可导致任何人使用同一个电话号码注册新账户后&#xff0c;获得无限制的服务额度。 作为人工智能公司&…

赚翻了!外国小哥用ChatGPT完成80%工作,同时打4份工

Datawhale分享 最新&#xff1a;ChatGPT应用&#xff0c;编辑&#xff1a;新智元 【导读】自从ChatGPT火了以后&#xff0c;办公室白领可真是爽翻了。甭管什么任务&#xff0c;交给ChatGPT&#xff0c;准没错。 不少白领在工作中都用上了ChatGPT&#xff0c;堪称如虎添翼。 毕…

ShardingJDBC读写分离

ShardingJDBC是什么 看一看ChatGPT对他的解释&#xff1a; ShardingJDBC是一个数据库连接池&#xff0c;它为数据库的分片和读/写拆分提供支持。它允许您跨多个物理数据库和服务器分发数据&#xff0c;并根据设置的配置将读写操作路由到适当的数据库。 以下是它的工作原理&…

为什么总是闹离职的员工没走,平时不吭声的员工却突然离职?

上一篇&#xff1a;华为“天才少年”稚晖君被曝离职&#xff01;两年前加入年薪百万起步的天才少年计划&#xff01; 相信工作过几年的朋友都遇到过类似的现象&#xff1a;总是闹离职的员工没走&#xff0c;平时不吭声的员工却突然离职。 其实很正常&#xff0c;总是闹离职的说…

盘点海外 AIGC 独角兽创始人,中国何时迎来自己的高光时刻?

据不完全统计&#xff0c;全球 AIGC 创业公司中估值在 10 亿美元以上的已经多达 10 家。包括推出 ChatGPT 的 OpenAI&#xff0c;因《太空歌剧院》而走红的 Midjourney 等。这些独角兽背后的创业者都是谁&#xff1f;他们又是如何成为时代的开创者&#xff1f;本篇文章带你一看…

适合程序员使用的 ChatGPT!!!

ChatGPT 不仅能解决亲情&#xff0c;友情&#xff0c;爱情等非常热门的问题&#xff0c;还能帮助程序员在开发中反复测试自己的代码或者切磋技艺。 例如&#xff0c;作为程序员的我们&#xff0c;只要在ChatGPT上轻轻松松地输出我们的需求&#xff0c;“null pointer怎么解决啊…

1 分钟高效集成 ChatGPT,Stable Diffusion 等 AIGC 模型最强教程

1 分钟能做什么&#xff1f;集成 ChatGPT 到自己的公众号&#xff0c;小程序或者 APP&#xff1f;集成各种形式的 Stable Diffusion&#xff0c;让 AIGC 帮助自己的项目更有趣&#xff0c;更生动&#xff1f;本教程将会教大家如何 1 分钟高效集成 ChatGPT&#xff0c;Stable Di…

【起飞】让你电脑速度快到飞起的一些牛逼的设置整理【电脑卡顿反应慢等问题解决】

对于开发来说电脑的反应速度简直影响了思维的速度&#xff0c;要让电脑速度跟上我们的思维&#xff0c;提高工作效率&#xff0c;早点打卡下班回家陪老婆孩子哈哈 这篇文章主要对windows系统做的一些优化&#xff0c;是真的好用&#xff0c;仿佛在访问静态页面一样&#xff0c;…

【Redis】孔夫子旧书网爬虫接入芝麻代理IP:代理IP利用效率最大化

背景&#xff1a; 之前用过芝麻IP&#xff0c;写过这几篇文章 《【Python】芝麻HTTP代理系列保姆级全套攻略(对接教程自动领取每日IPIP最优算法)》 《【Python】记录抓包分析自动领取芝麻HTTP每日免费IP&#xff08;成品教程&#xff09;》 《爬虫增加代理池&#xff1a;使用稳…

高通410 随身WIFI刷入Debian系统(玩法合集)

引言 刚接触到这个项目是在b站上&#xff0c;刷到一位UP主的视频&#xff1a;https://b23.tv/xAFWiTF 其实现了在搭载高通410芯片的随身WIFI烧录linux系统&#xff0c;并在上面部署了chatGPT-Next网站服务。 本人参考的教程链接和其教程所有工具&#xff1a;https://pan.bai…

chatgpt赋能python:Python如何薅羊毛?

Python如何薅羊毛&#xff1f; 近年来&#xff0c;Python已经成为了越来越多程序员的首选编程语言。除了在技术领域得到广泛应用&#xff0c;Python还可以被用于一些非正当途径&#xff0c;比如薅羊毛。在这篇文章中&#xff0c;我们将会学习如何利用Python来薅羊毛。 什么是…

【ChatGPT】GPT实现原理大解析——看完就知道什么叫颠覆

文章目录 前言一、ChatGPT是什么&#xff1f;二、那么&#xff0c;如何计算下一个单词的概率&#xff1f;三&#xff0c; 什么是模型&#xff1f;四&#xff0c;如何制作能完成人类任务的模型五&#xff0c;神经网络总结 前言 ChatGPT 能够自动生成类似于人类写作的文本&#…

多平台发布文章怎么做?自媒体多平台发内容教程分享

目前很多小伙伴着手做自媒体全部都是在一些自媒体视频或是时尚博主的推荐下才了解到做自媒体可以为自己创造收入&#xff0c;刚开始做得时候或许只是会弄两三个账户&#xff0c;察觉收入也并不高&#xff0c;便不愿意去做相应的事情了&#xff0c;确实目前做自媒体的人太多了&a…

自媒体文章同步该怎么做?有什么办法可以一键同步到多自媒体平台

在自媒体行业当中&#xff0c;有很多人的苦恼就是应该如何将自己的创作内容同时发布在各大媒体上&#xff0c;应该进行什么样的步骤才能够进行同步。那我们需要在各大平台进行授权&#xff0c;才能够进行同时发布&#xff0c;不仅非常的繁琐&#xff0c;而且在管理账户方面更容…