Skip to content

Latest commit

 

History

History
55 lines (41 loc) · 1.7 KB

error-use-after-poison.md

File metadata and controls

55 lines (41 loc) · 1.7 KB
title description ms.date f1_keywords helpviewer_keywords
Error: use-after-poison
Source examples and live debug screenshots for use after poison errors.
03/02/2021
use-after-poison
use-after-poison error
AddressSanitizer error use-after-poison

Error: use-after-poison

Address Sanitizer Error: Use of poisoned memory

A developer can manually poison memory to customize debugging.

Example

// example1.cpp
// use-after-poison error
#include <stdlib.h>

extern "C" void __asan_poison_memory_region(void *, size_t);

int main(int argc, char **argv) {
    char *x = new char[16];
    x[10] = 0;
    __asan_poison_memory_region(x, 16);

    int res = x[argc * 10];              // Boom!
 
    delete [] x;
    return res;
}

To build and test this example, run these commands in a Visual Studio 2019 version 16.9 or later developer command prompt:

cl example1.cpp /fsanitize=address /Zi
devenv /debugexe example1.exe

Resulting error

:::image type="content" source="media/use-after-poison-example-1.png" alt-text="Screenshot of debugger displaying use-after-poison error in example 1.":::

See also

AddressSanitizer overview
AddressSanitizer known issues
AddressSanitizer build and language reference
AddressSanitizer runtime reference
AddressSanitizer shadow bytes
AddressSanitizer cloud or distributed testing
AddressSanitizer debugger integration
AddressSanitizer error examples