相关文章推荐
霸气的充电器  ·  mysql - Python pip ...·  1 年前    · 
面冷心慈的保温杯  ·  每日一库之 ...·  1 年前    · 
char *x = (char*)malloc(10 * sizeof(char)); memset(x, 0, 10); int res = x[argc * 10]; // Boom! free(x); return res;

若要生成并测试此示例,请在 Visual Studio 2019 版本 16.9 或更高版本的 开发人员命令提示符 中运行以下命令:

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

生成的错误

示例 - 不正确的向下强制转换

// example2.cpp
// heap-buffer-overflow error
class Parent {
public:
    int field;
class Child : public Parent {
public:
    int extra_field;
int main(void) {
    Parent *p = new Parent;
    Child *c = (Child*)p;  // Intentional error here!
    c->extra_field = 42;
    return 0;

若要生成并测试此示例,请在 Visual Studio 2019 版本 16.9 或更高版本的开发人员命令提示符中运行以下命令:

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

生成的错误 - 不正确的向下转换

示例 - strncpy 进入堆中

// example3.cpp
// heap-buffer-overflow error
#include <string.h>
#include <stdlib.h>
int main(int argc, char **argv) {
    char *hello = (char*)malloc(6);
    strcpy(hello, "hello");
    char *short_buffer = (char*)malloc(9);
    strncpy(short_buffer, hello, 10);  // Boom!
    return short_buffer[8];

若要生成并测试此示例,请在 Visual Studio 2019 版本 16.9 或更高版本的开发人员命令提示符中运行以下命令:

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

生成的错误 - strncpy 进入堆中

AddressSanitizer 概述
AddressSanitizer 已知问题
AddressSanitizer 生成和语言参考
AddressSanitizer 运行时参考
AddressSanitizer 影子字节
AddressSanitizer 云或分布式测试
AddressSanitizer 调试程序集成
AddressSanitizer 错误示例