败犬日报 2025-08-09
1. asan 用于下毒的代码
cpp
class AsanPoisonDefer {
#ifdef ADDRESS_SANITIZER
public:
// Poison the memory region to prevent accidental access
// during the lifetime of this object.
AsanPoisonDefer(const void* start, size_t len) : start(start), len(len) {
ASAN_POISON_MEMORY_REGION(start, len);
}
// Unpoison the memory region when this object goes out of scope.
~AsanPoisonDefer() { ASAN_UNPOISON_MEMORY_REGION(start, len); }
private:
const void* start;
size_t len;
#else
public:
// No-op for platforms without ASAN_DEFINE_REGION_MACROS
AsanPoisonDefer(const void*, size_t) {}
~AsanPoisonDefer() = default;
#endif
};
手动下毒,防止内存上没越界,但逻辑上越界了。
例如访问 vec[0]
的时候,给 vec[1]
打 poison。
主要用于内存池,越界也不会报错,只能手动下毒。
2. 是否正确:C++ 代码中 int, printf 这些是 C 的东西
错误的,都是 C++ 的,只是“恰好”用 C 也能通过编译。