代码之家  ›  专栏  ›  技术社区  ›  abjoshi - Reinstate Monica

使用ASLR的Linux中的堆栈位置

  •  -1
  • abjoshi - Reinstate Monica  · 技术社区  · 7 年前

    在启用ASLR的Linux中,用户堆栈地址所在的地址范围是否存在?堆、指令地址(文本部分)怎么样? 一般来说,是否可以查看地址并判断它是用于数据还是用于代码?

    编辑: 我正在尝试编写一个Pintool,在返回后查看EIP并检查EIP是否指向数据区域。假设此系统上未启用NX。

    出于某种原因,这被否决了。幸运的是,可以在这里找到答案: https://security.stackexchange.com/questions/185315/stack-location-range-on-linux-for-user-process/185330#185330

    1 回复  |  直到 7 年前
        1
  •  1
  •   o11c    7 年前

    cat /proc/self/maps 将显示主线程堆栈的初始位置。由于(至少)以下原因,这可能不准确:

    • 你不在主线中
    • 程序的任何部分都是使用 -fsplit-stack 选项,或者调用执行类似操作的库
    • 您位于请求 sigaltstack 而是堆叠
    • 你会像CHICKEN Scheme那样使用堆栈作为堆,使用奇怪的alloca技巧
    • 。。。

    还要注意,一般区域不是完全随机的。请参阅AddressSanitizer项目,以了解利用此功能的内容。