如何创建缓冲区溢出来测试Address Sanitizer?

时间:2015-12-27 21:28:34

标签: swift buffer-overflow 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 

我已通过点击我的应用程序>启用了Xcode中的Address Sanitizer。编辑方案...然后“启用地址清理程序”。然后我在运行之前重建了我的应用程序。

问题

如何在Swift 2中创建缓冲区溢出?

1 个答案:

答案 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;
}