- 公开视频 -> 链接点击跳转公开课程
- 博客首页 -> 链接点击跳转博客主页
目录
一、IEEE 754标准在MASM中的实现
1. 浮点数存储模型解析
(1) 单精度浮点(REAL4)结构
二、逆向工程中的浮点数据分析
1. 浮点指令逆向分析
(1) x87 FPU指令集
(2) SSE指令优化
三、安全领域的深度应用
1. 浮点异常攻击面
(1) 非规格化数攻击
一、IEEE 754标准在MASM中的实现
1. 浮点数存储模型解析
(1) 单精度浮点(REAL4)结构
var1 REAL4 +3.5 ; 内存布局:00 00 60 40 (小端序)
-
二进制分解:
- 符号位:1bit(0表示正数)
- 指数域:8bit(偏移值127)
- 尾数域:23bit(隐式前导1)
-
编码过程:
- 十进制转换:3.5 = 11.1₂
- 规格化处理:1.11₂ × 2¹ → 指数 = 127 + 1 = 128 (10000000₂)
- 尾数处理:舍去前导1,补零至23位 → 11000000000000000000000₂
-
内存验证:
00404000: 00 00 60 40 ; 小端序解析为0x40600000 0x40600000 → 0_10000000_11000000000000000000000
二、逆向工程中的浮点数据分析
1. 浮点指令逆向分析
(1) x87 FPU指令集
fld REAL4 PTR [var1] ; 将3.5压入FPU栈(ST0)
fadd REAL8 PTR [var2] ; ST0 = ST0 + (-7.25)
fstp REAL4 PTR [result] ; 存储结果并弹出栈
- 逆向特征:
- 指令操作数大小决定精度(DWORD/QWORD)
- 栈操作顺序:ST(0)-ST(7)循环使用
(2) SSE指令优化
movss xmm0, [var1] ; 加载单精度数
cvtsi2sd xmm1, eax ; 整数转双精度
divpd xmm2, xmm3 ; 打包双精度除法
- 关键特征:
- 寄存器扩展:XMM0-XMM15(AVX扩展至YMM/ZMM)
- 指令后缀:
- SS:标量单精度
- SD:标量双精度
- PS:打包单精度
三、安全领域的深度应用
1. 浮点异常攻击面
(1) 非规格化数攻击
float f = 1.401298e-45; // 最小非规格化数
int i = (int)f; // 触发精度丢失
- 内存特征:
- 单精度:指数域全0(0x00000001 - 0x007FFFFF)