Как создать переполнение буфера для тестирования 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;
}