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/