我试图了解如何为C程序分配内存空间。为此,我想确定堆栈和数据段边界。是否有任何图书馆电话或系统电话可以完成这项工作?我发现堆栈底部可以通过读取/ proc / self / stat来确定。但是,我找不到怎么做。请帮忙。 :)
答案 0 :(得分:2)
进程不再有单个“数据段”。他们在地址空间中有一堆内存映射。常见的情况是:
正如尼古拉指出的那样,你可以使用pmap工具查看这些列表。
答案 1 :(得分:0)
没有通用的方法可以做到这一点。事实上,一些安全计算环境随机化了确切的地址空间分配和顺序,因此代码注入攻击对工程师来说更具挑战性。
但是,每个C运行时库都必须安排数据和堆栈段的贡献,以便程序正常工作。读取运行时启动代码是找到答案的最直接方式。
您对哪个C编译器感兴趣?
答案 2 :(得分:0)
查看/proc/<pid>/maps
和/proc/<pid>/smaps
(假设是Linux)。还pmap <pid>
。