堆栈桢结构与gcc版本
这阵子在看内存溢出的相关文章——Smashing The Stack For Fun And Profit,发现时间已经很久远了,linux发行版也发生了很多变化,关于压栈时堆栈桢的结构,已经不能和现在的Fedora Core 7 with gcc 4.1.2一致了,压栈的时候依次压入函数参参数、EIP、EBP、函数内部参数,并且4bytes对齐,但是是在intel x86+FC7+gcc 4.1.2+kernel 2.6.23.17的情况下却不同,应该是gcc版本问题导致的,请问,gcc的版本与压栈流程有什么具体关系?使用gcc 的-std=选项编译了c89和c99的程序,gdb反汇编出来是一样的~~
另外,还想知道AMD 64位处理器堆栈操作是否与x86的一致,是否仅仅是64位的却别?
谢谢~~
[ 本帖最后由 ruger 于 2008-8-18 10:55 编辑 ]
另外,还想知道AMD 64位处理器堆栈操作是否与x86的一致,是否仅仅是64位的却别?
谢谢~~
20071222_bf2fb12861cd60c6141abQtIAKR1uKXR.gif (147.48 KB, 下载次数: 1)
[ 本帖最后由 ruger 于 2008-8-18 10:55 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
64的abi和32位压根不一样,参考:
http://www.x86-64.org/documentation/abi-0.99.pdf
多谢~~
但是32位的intel x86处理器+FC7+gcc 4.1.2+linux kernel 2.6.23还是不大明白,还想找到具体的在这套环境下压栈的过程,比如说对齐细节什么的,谢谢啦~~
32位的ABI文档是SCO发布的,url我找不到了,上传一份:
谢谢!很有用。