【问题标题】:What is this stack-checking PPC assembly doing?这个堆栈检查 PPC 程序集在做什么?
【发布时间】:2010-12-17 06:37:20
【问题描述】:

我有以下独立的功能(即它被分支到使用bl CheckStackFunc),我对它的用途感到困惑。熟悉 PowerPC 组装的人可以帮忙吗?

_CheckStackFunc:
    neg     %r11, %r12
    addi    %r0, %r11, 0xFFF
    srawi.  %r0, %r0, 0xC
    blelr
    mr      %r11, %sp
    mtctr   %r0
loc_10176B0C:                           
    lwzu    %r0, -0x1000(%r11)
    bdnz    loc_10176B0C
    blr

话虽如此,我正在使用 IBM 的 this 文档作为我的 PPC 程序集参考。这被认为是最终来源还是我应该注意的其他来源?

【问题讨论】:

    标签: assembly stack powerpc


    【解决方案1】:

    我对 PPC 一点也不熟悉,但这是我的猜测:

    对我来说,它看起来像 alloca_probe()。 接触带有页面步骤的堆栈的代码,以便触发PAGE_GUARD 异常。 (请原谅我的 x86 语言:))

    它在大堆栈分配后使用(也可以通过alloca 完成)。堆栈通常不会为堆栈分配保留所有内存,最后实际加载的页面有一个特殊标志PAGE_GUARD,它会触发操作系统捕获的硬件异常,以便它可以向堆栈提交更多页面.当堆栈正常使用时(带有push/pop),则无法绕过该页面。但是,对于较大的分配,需要调用 alloca_probe() 才能安全地使用内存。

    【讨论】:

    • 太棒了,看起来就是这样。感谢您如此迅速的回应 - 并详细说明。非常感谢。
    • 不客气。我也曾经和alloca_probe 相处过一次:)
    猜你喜欢
    • 2011-08-06
    • 2021-07-08
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多