用 magic 变量解决 UAF 问题
最近学到了一个很有意思的方法解决 UA(Use-After-Free) 的问题,示例代码如下
1 |
|
简单来说就是在定义类的时候,增加一个 magic 的变量,用于记录当前的变量是否已经被释放了
同时使用了 assert
在每一个方法内判断一下是否正在执行被释放的代码
如果被释放了(示例中的代码),此时就会提示
Assertion failed: (_magic == 0x41), function print, file main.cpp, line 16.
其中可以注意到使用了 0x41
作为 magic 的默认值,也是为了解决 CPP 没有 RTTI 的问题,因为其恰好是 A
这个字母
用 magic 变量解决 UAF 问题
https://blog.mauve.icu/2024/07/10/cpp/magic-variable-resolve-UAF/