2

问题

我正在尝试创建缓冲区溢出以了解有关 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 中启用了地址清理器。然后我在运行之前重建了我的应用程序。

问题

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

4

1 回答 1

4

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

Address Sanitizer 是基于 C 语言的 LLVM 工具。

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

为了使用 Address Sanitizer,Xcode 将一个特殊的标志传递给 clang。

似乎 Address Sanitizer 仅适用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;
}
于 2015-12-27T21:59:54.907 回答