免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: pprpg
打印 上一主题 下一主题

*如果把堆栈分为代码堆栈和数据堆栈, 是不是就能解决"缓冲区溢出"问题? [复制链接]

论坛徽章:
1
技术图书徽章
日期:2013-09-10 08:57:55
11 [报告]
发表于 2012-04-03 10:40 |只看该作者
oooooxxxxx 发表于 2012-04-03 05:08
……
创新的前提是承前,想处理这些问题先要想一想,某些道理很简单为什么别人想不到,真的是他们太傻吗 ...


我倒没有说别人傻的意思, 恰好是因为觉得这个方法似乎更好, 也不难想到, 却为什么没有实际使用.
另外, 我想如果有人有兴趣, 继续讨论下除了兼容性, 这个方案还有没有其它缺点.

论坛徽章:
0
12 [报告]
发表于 2012-04-04 19:57 |只看该作者
你给我说说你设想的那代码堆栈和数据堆栈怎么定义的?它们在内存里面是怎么存放的?处理器的缓存和内存的数据交换怎么处理?你这么保证效率?你怎么保证汇编指令不改你的数据?指令添加你打算怎么添加?

论坛徽章:
1
技术图书徽章
日期:2013-09-10 08:57:55
13 [报告]
发表于 2012-04-04 21:51 |只看该作者
lj870128 发表于 2012-04-04 19:57
你给我说说你设想的那代码堆栈和数据堆栈怎么定义的?它们在内存里面是怎么存放的?处理器的缓存和内存的数据交换怎么处理?你这么保证效率?你怎么保证汇编指令不改你的数据?指令添加你打算怎么添加?


代码堆栈和数据堆栈一样, 在内存中开辟一块作为代码堆栈, 再增加1个寄存器指向代码堆栈的栈顶.
修改call,ret之类的指令实现为在代码堆栈保存和读取地址.
比如call指令, 现在是把当前的下一条指令地址Push到数据堆栈中. 修改后即把当前的下一条指令地址Push到代码堆栈中.
ret同理, 在代码堆栈中获取返回地址.

如果只有call,ret涉及地址的出入栈, 这么修改的效率与原来相同.
汇编指令仍然可以寻址到代码堆栈, 这样是为了防止缓冲区溢出把数据堆栈覆盖后, 返回地址也被修改的情况.

论坛徽章:
0
14 [报告]
发表于 2012-04-04 22:50 |只看该作者
本帖最后由 lj870128 于 2012-04-04 22:52 编辑

回复 13# pprpg


    内存你想分一块就分一块没问题,分多大?分在哪边?在现在栈的那边还是堆的那边?如果在堆的那边,程序申请内存的时候,你怎么给程序申请同时确保你的栈有足够的空间?如果在现在栈的那边,那么你怎么保证现在栈的增长不会把它给踩了?另外指令不是你想象中这么容易添加的,归根到底它是靠处理器电路实现的,你考虑过处理器怎么设计了吗?脚踏实地地学才是正道,存在必然有存在的道理,想要革命也得深刻熟悉现状的情况下同时找出解决办法,革命不是盲目的~

论坛徽章:
1
技术图书徽章
日期:2013-09-10 08:57:55
15 [报告]
发表于 2012-04-04 23:36 |只看该作者
数据堆栈怎么分配代码堆栈就怎么分配, 代码堆栈小得多, 怎么会没有足够的空间?

放在与缓冲区溢出相反的方向就行了.

目前为止用不着增加指令.
修改或增加指令是CPU厂商的事情, 他们肯定知道怎么添加指令, 怎么实现处理器电路, 怎么设计处理器.

我只是有个疑问, 为什么CPU厂商不这么做?
(肯定没到geming的地步, 这个又能用了?)

论坛徽章:
0
16 [报告]
发表于 2012-04-07 13:18 |只看该作者
回复 15# pprpg


    别理所当然地想这么多,你研究一下计算机体系结构和CPU设计,然后结合现在的情况,多推敲一下再说吧~

论坛徽章:
1
技术图书徽章
日期:2013-09-10 08:57:55
17 [报告]
发表于 2012-04-07 16:25 |只看该作者
回复 16# lj870128


    欢迎就事论事的讨论, 你这种回复放在所有的帖子里都行. 有什么意义?
    如果有人能有针对性的指出我这种提法的问题, 欢迎批评.
    但如果只是大而化之的说一个你某某方面要加强, 加强完了后再来讨论. 那是否就像影迷讨论影片一样? 影迷大多既不会导也不会演, 都闭嘴算了.

论坛徽章:
0
18 [报告]
发表于 2012-04-07 17:09 |只看该作者
回复 17# pprpg


    呵呵,你都没有足够的积累就说这些,有意义吗?你干嘛不去问问飞机制造商为什么不把飞机制造得和飞机里面黑匣子一样坚固,那么岂不是飞机摔不坏了?那么我就简单地问一个,这个算是把缓冲区溢出解决了,你怎么保证没有别的问题,不管你数据在哪里,只要拿到数据的地址,改了就改了?另外你以为人家设计芯片的就没考虑过这个问题吗?别简简单单地说那是人家设计的事情,你来设计一下看看,我最近就在看CPU设计,我知道那些所谓的指令是怎么执行的?CPU设计是权衡各项利弊的,就好比分配内存分页的问题上面,将页的大小设置大了,访问数据更快,但是造成浪费,设置小了节约了,但是数据访问慢了。

论坛徽章:
1
技术图书徽章
日期:2013-09-10 08:57:55
19 [报告]
发表于 2012-04-07 18:21 |只看该作者
lj870128 发表于 2012-04-07 17:09
回复 17# pprpg

你都没有足够的积累就说这些,有意义吗?你干嘛不去问问飞机制造商为什么不把飞机制造得和飞机里面黑匣子一样坚固,那么岂不是飞机摔不坏了?那么我就简单地问一个,这个算是把缓冲区溢出解决了,你怎么保证没有别的问题,不管你数据在哪里,只要拿到数据的地址,改了就改了?另外你以为人家设计芯片的就没考虑过这个问题吗?别简简单单地说那是人家设计的事情,你来设计一下看看,我最近就在看CPU设计,我知道那些所谓的指令是怎么执行的?CPU设计是权衡各项利弊的,就好比分配内存分页的问题上面,将页的大小设置大了,访问数据更快,但是造成浪费,设置小了节约了,但是数据访问慢了。


有什么系统设计不是权衡各项利弊的?
照常理分析, 这个方案肯定不如现有的. 我在前面也说过这个方法不难想到, 何来"你以为人家设计芯片的就没考虑过这个问题吗?".
我的问题始终是: 是什么具体的原因, 导致不用这个方案(现有的方案漏洞还是不少).

另外, 如果你对找出这个具体的原因不感兴趣, 又何必在这个帖子浪费时间?

论坛徽章:
0
20 [报告]
发表于 2012-04-07 21:12 |只看该作者
pprpg 发表于 2012-04-07 18:21
有什么系统设计不是权衡各项利弊的?
照常理分析, 这个方案肯定不如现有的. 我在前面也说过这个方法不难 ...


你都说你没写过汇编,那么你对CPU也肯定不熟,你这也不熟那也不熟就来考虑这些事情。我还真没见过有多少人是在没有积累和熟悉全局的情况下就去考虑这些东西,正如爱恩斯坦如果连基本的物理知识都不懂,我还真没法知道他是怎么想出相对论这事情的。我承认我对CPU不算很熟,但是我至少在学习和了解,甚至去尝试设计CPU。我没有兴趣来搭理你这事情的,只是那闪烁的消息提醒碍眼罢了~免回了,费得我碍眼~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP