免费注册 查看新帖 |

Chinaunix

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

求高手代码分析一段堆栈溢出代码 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-04-21 14:10 |只看该作者
原帖由 zx_wing 于 2007-4-21 14:07 发表


我很疑惑你的代码是否能达到你要求的效果。

我给一个栈的示意图你就知道为什么了。
[code]
_______________
|   arg n       |
---------------
|               |
|...............|
--------- ...


应该看情况,看编译器怎么生成函数的前几条指令。

论坛徽章:
0
12 [报告]
发表于 2007-04-21 14:11 |只看该作者
编译器预留不预留空间是编译器相关的,我试验了3个编译器,有一个没有

论坛徽章:
0
13 [报告]
发表于 2007-04-21 14:11 |只看该作者
原帖由 flw2 于 2007-4-21 14:08 发表

这些还是有点用的,性质不一样。
如果这些没有用,那么就是纯理论有用了,学习c语言就没有什么用,学习linux也没有用,更不用说学习怎么使用vi了。


是的,虽然不提倡这样写,但这样的例子有助于我们更好的理解程序如何工作。

论坛徽章:
0
14 [报告]
发表于 2007-04-21 14:11 |只看该作者
我不懂的是调用函数时,程序是如何控制栈?按什么样的顺序压、弹栈,如何返回给主函数?等等
即栈方面的操作不太懂

论坛徽章:
0
15 [报告]
发表于 2007-04-21 14:12 |只看该作者
原帖由 okyzx 于 2007-4-21 14:11 发表
我不懂的是调用函数时,程序是如何控制栈?按什么样的顺序压、弹栈,如何返回给主函数?等等
即栈方面的操作不太懂

推荐你完整的,甚至硬着头皮看一本汇编语言的书。

论坛徽章:
0
16 [报告]
发表于 2007-04-21 14:13 |只看该作者
否则你研究这些真的意义不大,你会了就不愿意研究这些“没用的”了。

论坛徽章:
0
17 [报告]
发表于 2007-04-21 14:14 |只看该作者
实际上我见过真实的例子
先jmp到一个地方,然后再ret
而不是call-ret

论坛徽章:
0
18 [报告]
发表于 2007-04-21 14:16 |只看该作者
原帖由 flw2 于 2007-4-21 14:11 发表
编译器预留不预留空间是编译器相关的,我试验了3个编译器,有一个没有


是的,这个是和编译器相关的。所以我怀疑他的代码能否正常工作。
因为vc用的intel的编译器ICL(linux下的叫ICC),这款编译器是相当厉害,所以我不相信ICC在编译时不预留空间,预留空间可以大幅度减轻栈溢出的损害。

论坛徽章:
0
19 [报告]
发表于 2007-04-21 14:21 |只看该作者
原帖由 flw2 于 2007-4-21 14:12 发表

推荐你完整的,甚至硬着头皮看一本汇编语言的书。


现在没有这个必要了吧,国内那些书很糟糕的。如果是应用程序员,看那些没用。如果是系统程序员,一般看的也是《IA32 software development manual》这样的专业cpu架构指南。

对于楼主的情况,我推荐你看CSAPP(中文译名《深入理解计算机系统》)第三章 ---《程序的机器级表示》。 页数不多,讲的也很好。

论坛徽章:
0
20 [报告]
发表于 2007-04-21 14:31 |只看该作者
谢谢各位。
手上暂时没有你们推荐的书。能否帮小弟简单讲下函数调用时栈的情况,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP