问题
我正在尝试创建缓冲区溢出,以便了解有关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
我已通过点击我的应用程序>启用了Xcode中的Address Sanitizer。编辑方案...然后“启用地址清理程序”。然后我在运行之前重建了我的应用程序。
如何在Swift 2中创建缓冲区溢出?
答案 0 :(得分:3)
来自https://developer.apple.com/videos/play/wwdc2015-413/?time=947
地址Sanitizer是一种基于C语言的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;
}