|
发表于 2024-4-12 21:36:17
|
查看: 2206 |
回复: 1
PSLLW/PSLLD/PSLLQ/PSLLDQ 算术字节左移 //移动N*8位 空出来的位用0填充
PSRLW/PSRLD/PSRLQ/PSRLDQ 算术字节右移 //移动N*8位 空出来的位用0填充
PSLLW 字操作 //16位 WORD
PSLLD 双字操作//32位 DWORD
PSLLQ 4字操作 //64位 QWORD
PSLLDQ 8字操作//128位 XMMWORD
郁金香灬游戏外挂技术
官方网址 www.yjxsoft.com
本教程视频1920*1080分辩率下观看最佳
VS2017+win10 64位 环境
郁金香灬老师:QQ 3003975536 备用QQ 150330575 391990139
欢迎大家一起研究游戏安全与游戏外挂方面知识。
兴趣+时间+优秀老师会帮助你快速成功
知识点:
64位整数转浮点
双浮点数转整数
#include<intrin.h>
#include <emmintrin.h>
SSE/SSE2/SSE3 //Intel扩展指令有几十条
//整数 转浮点数
//浮点数 转整数
CVTSS2SI – 取出一个32位的浮点值,并取整(四舍五入)为一个64位的整型。内部指令:_mm_cvtss_si64
CVTTSS2SI – 取出一个32位的浮点值,并截断为一个64位的整型。内部指令:_mm_cvttss_si64
//浮点数 转整数
CVTSD2SI – 取出最低位的64位浮点值,并取整为一个整型。内部指令: _mm_cvtsd_si64
CVTTSD2SI – 取出一个64位的浮点值,并截断为一个64位的整型。内部指令:_mm_cvttsd_si64
//整数 转浮点数
CVTSI2SD – 取出最低位的64位整型,并将其转换为一个浮点值。内部指令:_mm_cvtsi64_sd
CVTSI2SS – 把一个64位的有符号整型转换为一个浮点值,并把它插入到一个128位的参数中。内部指令:_mm_cvtsi64_ss
cvttss2si eax, dword ptr ss:[ebp-0x4] //float 转 int
cvtsi2ss xmm0, dword ptr ss:[ebp-0x8] //int 转 float xmm0= cvtsi2ss把123转换浮点数123.0f
cvtss2sd xmm0, dword ptr ss:[ebp-0xC] //float 转 double
COMISD 双精度浮点数 EFLAGS
cvttsd2si rcx,xmm0 // double 转 UINT64 // 456.0f 转换成 UIN64 456 rcx=转整数64(xmm0)
cvtsi2sd xmm0,rax // UIN64 转 double
cvtsi2sd xmm0,ecx // UIN32 转 double
cvttsd2si eax, xmm0 // double 转 UINT32 //x86下 一般使用 __dtoul3 <double 转 UINT32 >
//算术右移N个字节 //右移N*8个位
psrldq xmm1, 0x4 //128位的 右移 字节数 //右移了4字节 右移了32位
psllq xmm1, 0x1 //算术左移1字节
psrlq xmm1, 0x1 //算法右移1字节
PSLLW/PSLLD/PSLLQ/PSLLDQ 算术字节左移 //移动N*8位 空出来的位用0填充
PSRLW/PSRLD/PSRLQ/PSRLDQ 算术字节右移 //移动N*8位 空出来的位用0填充
//x64环境指令
#include<intrin.h>
#include <emmintrin.h>
int testx64()
{
__m128d a;
a.m128d_f64[0] = 200.5;
__int64 res = _mm_cvtsd_si64(a);
printf_s("Original a: %I64f\n", a.m128d_f64[0]);
printf_s("Result res: %I64d\n", res);
return 0;
}
郁金香老师: QQ 3003975536
备用 QQ 150330575
备用 QQ 391990139
手机 139 9636 2600
微信 139 9636 2600
支付宝 139 9636 2600
官方网址 www.yjxsoft.com
QQ交流群 29817979 9569245 158280115
|
游戏安全课程 学员办理咨询联系QQ150330575 手机 139 9636 2600 免费课程 在 www.bilibili.com 搜 郁金香灬老师
|
|