0x01 前言

在buuoj刷题时,遇到一道cicsn_2019_n_1
这题很简单,就是简单的溢出覆盖变量值。
但遇到了一个新的知识点,浮点数。

0x02 介绍

题目如下:
根据提示,我们要让v2等于11.28125

看汇编代码是如何进行比较的。
这里的movss、ucomiss都是单精度浮点数的操作符号,等同于mov、comp

看到进行比较的数实际上是0x41348000

0x03 google


参考文章https://www.zengl.com/a/201312/114.html
详细介绍了浮点数的二进制表达方式。

参照方法计算一下

11.28125

11

11/2  -> 5  1
5/2   -> 2  1
2/2   -> 1  0
1/2   -> 0  1

1011

0.28125

0.28125 * 2 = 0.5625 -> 0
0.5625 * 2 = 1.125   -> 1
0.125 *2 = 0.25      -> 0
0.25  * 2 = 0.5      -> 0
0.5 * 2 = 1          -> 1

.01001

1011.01001

1.01101001 * 2^3

0 10000010 01101001000000000000000

0100 0001 0011 0100 1000 0000 0000 0000

41348000

perfect 😃)))

这里再附上一个自动计算浮点数转换的网站:https://lostphp.com/hexconvert/