【发布时间】:2016-07-03 13:20:41
【问题描述】:
我正在尝试计算从堆栈开始到当前堆栈指针的偏移量。
当我阅读 /proc/[pid]/maps 我看到
befdf000-bf000000 rwxp 00000000 00:00 0 [stack]
0xbefdf000 看起来像堆栈起始地址。 问题是当我在 gdb 中查看 SP 寄存器时,实际堆栈指针类似于 0xbefff440。
堆栈从高地址向低地址增长,但 0xbefff440 大于 0xbefdf000,实际堆栈指针怎么可能高于 /proc/*/maps 的最高堆栈地址?
根据 gdb 内存检查函数,最高可读堆栈地址是 0xbeffffff,这看起来像是真正的堆栈开始,但是 proc 映射中的 befdf000 是什么?如果它不是真正的堆栈库,那么如何从 /proc/ 获取 0xbeffffff(启用 ASLR 时可能会发生变化)?
我正在 qemu 中在 ARM Debian 上运行测试。我禁用了 ASLR,因此堆栈地址不会在不同的程序运行之间发生变化。
【问题讨论】:
标签: linux