Как создать переполнение буфера для тестирования Address Sanitizer?

проблема

Я пытаюсь создать переполнение буфера, чтобы узнать больше о Address Sanitizer. Я написал следующий код, который, я думал, создаст переполнение буфера, хотя я должен ошибаться, так как он не выдает ожидаемого "Heap buffer overflow detected",

попытка

    var ints : [UInt8] = [ 1, 2, 3, 4 ]

    let a = UnsafeMutableBufferPointer(start: &ints, count: ints.count)

    a[28] = 17 // array out of index 

Я включил Address Sanitizer в XCode, щелкнув мое приложение> Изменить схему..., а затем "Включить Address Sanitizer". Затем я перестроил свое приложение перед запуском.

Вопрос

Как создать переполнение буфера в Swift 2?

1 ответ

Решение

С https://developer.apple.com/videos/play/wwdc2015-413/?time=947

Address Sanitizer - это инструмент LLVM для языков на основе Си.

и https://developer.apple.com/videos/play/wwdc2015-413/?time=1422

Чтобы использовать Address Sanitizer, XCode передает специальный флаг Clang.

Кажется, что адрес дезинфицирующее средство доступно только с clangдля C, Objective-C и т. д., но не с помощью компилятора Swift swiftc,

Простая программа на C, которая вызывает переполнение буфера

#include <stdio.h>
#include <stdlib.h>

int main(int argc, const char * argv[]) {

    int *p = malloc(4 * sizeof(int));
    p[28] = 17;

    return 0;
}
Другие вопросы по тегам