Xcode - 涂鸦,防护边缘和防护malloc

Spa*_*Dog 53 iphone macos xcode ios

有人可以解释Xcode中的这些选项有什么作用吗?

  • 启用S​​cribble
  • 启用Guard Edge
  • 启用Guard Malloc

他们是什么,他们做了什么以及他们对调试/测试有多大用处?

谢谢.

Joa*_*son 48

文档中.

  • 启用S​​cribble.用0xAA填充分配的内存,用0x55填充释放的内存.
  • 启用Guard Edge.在大型分配之前和之后添加保护页面.
  • 启用Guard Malloc.使用libgmalloc来捕获常见的内存问题,例如缓冲区溢出和use-after-free.

Scribble会让你很自然地通过覆盖任何曾经在内存块中的数据而免费使用内存块.
保护边缘和Guard Malloc将帮助您查找内存溢出和(在某种程度上)读取和写入保护内存块后使用,以使您的程序在滥用内存时更明显地崩溃.

  • 方问题:0xAA和0x55的选择是完全随意的,还是有原因的? (3认同)
  • 我知道这是几年前被问到的,但我对这些奇怪的价值观有其他解释.AA是10101010二进制,55是否定值,01010101.如果另一个值在内存中,则写入其中一个值可确保重写所有8位.此外,将AA更改为55,反之亦然,只需使用FF进行xoring,这非常快.如果值为55则与55进行AND运算将得到55,如果是AA则为0,反之亦然.使用这些值可以快速轻松地完成很多工作.我猜这就是为什么它们是测试内存读/写的常用值. (3认同)

Nut*_*tch 5

上面的"文档"链接通常是Xcode,但更具体地说,RN-MallocOptions详细介绍了这些(和其他)选项.

Jim Kubicek 在Obj-C调试捣乱内存中展示了一个很好的例子,包括重要的"如何在Xcode中启用这些内容?" 题:

打开"编辑方案"窗口并导航到"诊断"选项卡.您需要打开"启用Scribble"和"Malloc Stack"....简而言之,"Enabled Scribble"将使分配器将0xAA写入新分配的内存,并将0x55写入解除分配的内存."Malloc Stack"将记录您的记忆的分配和免费历史记录.

如果您已经读过这篇文章,您可能会对Apple的技术说明感兴趣: