Skip to content

败犬日报 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 也能通过编译。