设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
Linux 程序设计专题讨论
›
偶然想到的堆栈问题
返回列表
查看:
669
|
回复:
5
偶然想到的堆栈问题
[复制链接]
herberteuler
herberteuler
当前离线
积分
1620
IP卡
狗仔卡
发表于 2004-11-11 11:51:47
|
显示全部楼层
|
阅读模式
在大多数机器体系结构下,堆栈都是向下生长的,也就是说,如果把一个对象压入堆栈,栈指针的值会减小。这样,我们利用缓冲区溢出可以重写堆栈上的返回地址,执行我们自己希望执行的代码。
但仍然存在一些机器,它们的堆栈上向上生长的,这样可能无法重写返回地址。在这种机器上,应该是不能利用缓冲区溢出改写返回地址了。是这样吗?
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
nuclearweapon
nuclearweapon
当前离线
积分
330
IP卡
狗仔卡
发表于 2004-11-11 12:01:53
|
显示全部楼层
这样 就没有 “缓冲溢出“的概念了
回复
支持
反对
使用道具
举报
显身卡
doubleelec
doubleelec
当前离线
积分
773
IP卡
狗仔卡
发表于 2004-11-11 14:51:12
|
显示全部楼层
这样以来要想通过传递参数来改写返回地址就难了,可是一定有别的方法可以用呀.
比如你自己写个程序要根据局部变量地址找到返回地址然后修改之,这和堆栈的增长方向关系不大吧,只不过原来用加法,现在用减法.
回复
支持
反对
使用道具
举报
显身卡
crquan
crquan
当前离线
积分
284
IP卡
狗仔卡
发表于 2004-11-11 15:52:31
|
显示全部楼层
还有些机器调用函数时根本不把返回地址写到栈上,。。。因为有相关的硬件支持,
这是一个体系结构的问题,我看还是先把x86上的代码写好再说吧,
回复
支持
反对
使用道具
举报
显身卡
kj501
kj501
当前离线
积分
5317
IP卡
狗仔卡
发表于 2004-11-12 11:44:48
|
显示全部楼层
最初由 nuclearweapon 发表
这样 就没有 “缓冲溢出“的概念了
缓冲溢出的问题仍然存在,只是没有办法覆盖函数的返回地址了。
回复
支持
反对
使用道具
举报
显身卡
nuclearweapon
nuclearweapon
当前离线
积分
330
IP卡
狗仔卡
发表于 2004-11-12 18:16:09
|
显示全部楼层
TO:楼上
我的加引号的意思是:按照现在的缓冲区溢出思路再去做已经没有实际意义了。(主要是栈)即使理论上还可以,但是没有什么实际意义了,出现的几率也很小。
我解释一下:
第一,buffer overflow 的意思是一个函数的现场由于某种原因被破坏。例如:由于c编译器和现在栈结构的原因。在一个函数A调用的另外一个函数B的时候,A的现场可能由于B的一个局部数组越界而导致破坏。
第二,所谓的修改返回地址,一般(有实际目的)都是给系统调用大量的数据,发生的。要是堆栈上向上生长的,这样你是修改不了的。
你可能说,“我可以在我的函数里用减法来修改栈里的数据”,哪有什么用!!!你修改以后调用你自己的函数?!搞乱自己的现场?!没必要吧。调用不让用的内核函数?!不可能的。
所以说,也就没有意义了。
话说过来,这些和编译器体,系结构有很大关系。这只是简简单单的推理,其实会很复杂。
所以说,也就没有意义了。
因为以前不是太关注!可能还有其他方法!? 仔细说说可行性。楼上!
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表