从预防缓冲区溢出看MIPS与X86在函数调用开辟栈的区别
来源:互联网 发布:深圳市信诚网络 编辑:程序博客网 时间:2024/05/17 20:33
学习时间:2013/9/16Linux下有三类获取函数调用栈信息的函数:
(1)__builtin_frame_address();(2)__builtin_return_address();(3)backtrace()类。
但是经过测试发现在MIPS架构的处理器上都不能正常使用。通过分析X86与MIPS函数调用的反汇编代码,可以得到X86架构与MIPS架构在函数调用的时候开辟的栈空间如下;
X86架构函数调用时栈情况
MIPS架构函数调用时栈情况
然而X86架构下预防缓冲区溢出的核心算法就是:
第一句得到当前函数栈的栈帧指针,也即EBP寄存器值;第二句通过得到当前栈帧指针所指向的值得到调用当前函数的栈帧指针(巧妙运用X86架构上函数调用时候栈帧指针递归入栈的原理)。
然而,在MIPS下的函数调用的栈只有一个SP寄存器保存栈顶指针。无法仿照X86架构实现。
解决办法:(1)修改MIPS编译器漏洞;
当然:这只是我个人的思考与理解,也许MIPS爱好者有更好的解决办法,愿意学习!
0 0
- 从预防缓冲区溢出看MIPS与X86在函数调用开辟栈的区别
- 缓冲区溢出漏洞的预防
- 存储管理分析札记 :x86 与mips的一些区别
- 从汇编角度看英特尔x86函数调用规范
- 缓冲区溢出攻击—— 检测、剖析与预防
- 寻找堆栈溢出的挑战 - 《缓冲区溢出攻击—— 检测、剖析与预防》 - 免费试读 - book.csdn.net
- 缓冲区溢出[函数调用时的堆栈变化]
- 汇编语言函数调用小结及缓冲区溢出的利用
- 函数调用返回与栈帧空间开辟回收
- Linux下X86与MIPS区别之一:代码放在数据区是否可以被执行
- x86、arm、mips架构函数调用实例分析
- 在 x86 上面交叉编译 gstreamer for arm(zz)与MIPS平台上的编译(原)
- 如何特意制造栈缓冲区溢出?(x86 & ARM)
- 如何特意制造栈缓冲区溢出?(x86 & ARM)
- 从汇编看,vc调用API函数和自定义函数的区别
- 栈溢出:strcpy()造成的缓冲区溢出
- 从“成龙之死”看恶作剧新闻的传播力与预防之道
- mips 与 arm 的区别
- C#中异步SOCKET发送数据时内存问题
- Android adb常用指令使用指南
- HttpServer服务端测试模块-详解[5-1]
- 2014CVPR
- 修改oraclexe的默认http端口
- 从预防缓冲区溢出看MIPS与X86在函数调用开辟栈的区别
- hibernate之级联cascade和关系维持inverse
- java web 过滤器
- 64位系统的Detours
- java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,
- 黑马程序员笔记——Java面向对象之static关键字和单例设计模式
- iOS file 'XX-Prefix.pch' has been modified since the precompiled header was built
- 广义线性模型
- iOS项目中引用外部字体文件