当前位置:  技术问答>linux和unix

看过linux情景分析的请进,有关用户堆栈扩展的问题

    来源: 互联网  发布时间:2016-05-14

    本文导语:     看完用户堆栈的扩展,觉得除了find_vma名称容易误导初学者而不敢苟同外,其实现方式确实很巧妙:找出第一个比addr大的vm_end所在的vm_area_struct结构,有助于用户堆栈的扩展。  然而感觉用户堆栈的扩展还是有点...

   看完用户堆栈的扩展,觉得除了find_vma名称容易误导初学者而不敢苟同外,其实现方式确实很巧妙:找出第一个比addr大的vm_end所在的vm_area_struct结构,有助于用户堆栈的扩展。  然而感觉用户堆栈的扩展还是有点问题:
    情景分析第58页上的源代码可以告诉我们,1、当一个被访问的地址A位于堆栈基址B正下方2、且B—A的值小于等于32时,还得再加上一个限定条件:3、A和B之间没有另外一个虚存区间,满足这3个条件,linux就认为用户堆栈应当被扩展,将A包含其中。
   现在来分析源代码,来证明我刚才得出的结论:
    第58页源码中的151行中使用的vma是find_vma返回的结果(参考55页源码),而find_vma返回的是第一个比A地址要大的vm_end所在的vm_area_struct(昨天讨论的结果),根据上面的第一、三两个限定条件,可以得出结论:此时find_vma返回的地址是堆栈中的一个虚存区间。那么回到58页的151行,则if的判断条件(!(vma->flags & VM_GROWSDOWN))为假,跳过152行。进入153和160行,又根据第二个限定条件跳过161行,执行163行的扩展堆栈的相关代码。
从而证明要使linux扩展堆栈,必须同时满足上述三个条件。
     然而问题也随之而来:
     1、我认为B-A也有可能是为了想扩展堆栈,众所周知,c语言中的参数传递就是通过用户堆栈来进行的,如果刚好此时堆栈已满,而系统再调用一个包含9个(或以上)的int类型的参数,那么堆栈基址B和压栈后的栈顶A的差距肯定大于32,那么此时岂不是达不到扩展堆栈的效果,因为没有满足第2个限定条件。
     2、如果用户程序无意中突然访问了一个恰好符合以上3个条件的地址空间,而并非是进行入栈操作,仅仅访问而已,那么岂不是反而被linux认为要进行堆栈扩展了?
     请高手提示。

|
1.首先C中的参数传递并非全靠堆栈,前4个参数在可能的情况靠寄存器传递.第2,通常系统调用的参数数量会被尽可能限制数量,以靠寄存器提高速度
如果真的为9个参数,这时堆栈满,且不用寄存器优化的情况,也么问题.因为参数是1个个进栈的,当然先是函数的返回地址,再是函数参数,所以即使参数
很多,但压入1个进栈后,就会发现堆栈空间满,此时判断条件满足,进行堆栈的扩展.
2.用户程序除了出栈入栈怎么会访问到这个空间呢?程序只会访问堆栈空间内的数据,超出堆栈的对用户程序来说,现在还是空洞,在堆的上方,是不会访问到的

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Ed的《Mastering EJB》的中文版谁看过?
  • 大家觉得LINUX程序设计这本书怎么样?看过的进来说说
  • 问:谁看过linux中的文件系统ext2?
  • 看过操作系统设计与实现的进来看看
  • 看过《数据结构与算法》(java版)谈谈一下感想?
  • 看过top码的高手看过来
  • 看过《tcp/ip详解》3卷,请问下书中原代码编译问题
  • 编程语言 iis7站长之家
  • 如果你看过《JAVA编程思想》,请进!
  • 大家看过这样写代码的吗?(size_t)-1
  • 有谁看过Linux的源代码交流一下,我目前在看Dnrd,ntpclient,openntpd
  • 有没有看过Oreilly的《Java and XML》的朋友,有个小问题!!!请帮忙!!
  • 昨天在书店看到一本《JAVA2入门经典》的书,老外写的,中国电力出版社出版的,有谁看过这本书,能不能给个建议评价。
  • 有那些高手将linux内核源代码完整的看过一遍啊
  • 看过<<JSP设计>>请过看看!急!在线等待!!!问题解决马上结贴!
  • 请通过SCJP和看过Java 2 认证考试指南(原书第3版,机械工业出版社)的来看看!!
  • 谁看过中国电力出版社的〈〈JAVA入门经典〉〉,一本砖头!
  • 与刚才提问的string有一定关系的一个程序。没有看的,看过的都来看呀!!!
  • 散分:有谁看过《 Java 2 编程指南(JDK 1.3版)》请评价一下
  • 高手看过了。我的linux9.0为什么上不了网?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3