欢迎来到天天文库
浏览记录
ID:36006793
大小:501.00 KB
页数:8页
时间:2019-04-29
《powerpc栈帧分析报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实用文案PowerPC栈帧分析1.PowerPC寄存器的使用规则通用寄存器的用途:r0 在函数开始(functionprologs)时使用。r1 堆栈指针,相当于ia32架构中的esp寄存器,idapro把这个寄存器反汇编标识为sp。r2 内容表(toc)指针,idapro把这个寄存器反汇编标识为rtoc。系统调用时,它包含系统调用号(这个好像跟系统有关吧)。r3 作为第一个参数和返回值。r4-r10 函数或系统调用开始的参数。r11 用在指针的调用和当作一些语言的环境指针。r12 它用在异
2、常处理和glink(动态连接器)代码。r13 保留作为系统线程ID。r14-r31作为本地变量,非易失性。专用寄存器的用途:lr 链接寄存器,它用来存放函数调用结束处的返回地址。ctr 计数寄存器,它用来当作循环计数器,会随特定转移操作而递减。xer 定点异常寄存器,存放整数运算操作的进位以及溢出信息。msr 机器状态寄存器,用来配置微处理器的设定。cr 条件寄存器,它分成8个4位字段,cr0-cr7,它反映了某个算法操作的结果并且提供条件分支的机制。2.栈帧的使用规则PowerPC寄存器没有专
3、用的Pop,Push指令来执行堆栈操作,所以PowerPC构架使用存储器访问指令stwu,lwzu来代替Push和Pop指令。PowerPC处理器使用GPR1来将这个堆栈段构成一个单向链表,这个单链表的每一个数据成员,我们称之为堆栈帧(StackFrame),每一个函数负责维护自己的堆栈帧。PowerPC体系结构中栈的增长方向是从高地址到低地址,堆的增长方式是从低地址到搞地址,当两者相遇时就会产生溢出。堆栈帧的格式如下:标准文档实用文案各部分名词解释:函数参数域(FunctionParameterArea):这
4、个区域的大小是可选的,即如果如果调用函数传递给被调用函数的参数少于六个时,用GPR4至GPR10这个六个寄存器就可以了,被调用函数的栈帧中就不需要这个区域;但如果传递的参数多于六个时就需要这个区域。局部变量域(LocalVariablesArea):通上所示,如果临时寄存器的数量不足以提供给被调用函数的临时变量使用时,就会使用这个域。CR寄存器:即使修改了CR寄存器的某一个段CRx(x=0至7),都有保存这个CR寄存器的内容。通用寄存器GPR:当需要保存GPR寄存器中的一个寄存器器GPRn时,就需要把从GPRn
5、到GPR31的值都保存到堆栈帧中。浮点寄存器FPR:使用规则共GPR寄存器。3. PowerPC的汇编指令和栈操作 PowerPC寄存器没有专用的push和pop指令来执行堆栈操作,所以PowerPC构架使用存储器访问指令stwu、lwzu来代替push和pop指令。4.函数执行时栈帧的建立与消亡过程函数栈的建立与消亡过程如下图所示:4.1函数栈的建立与消亡过程说明如前所属,PowerPC体系结构中栈的增长方向是从高地址到低地址,故形成过程可以概括为如下几点:标准文档实用文案1)调用函数r1指向栈顶(SP)
6、,用间接寻址方式分配一定大小栈空间;2)r31指向栈顶,以r31为基值将参数压入栈内;3)进入被调函数,跳转到被调函数的SP处;4)被调函数同样进行栈分配及参数压栈操作;5)被调函数执行完毕之后,跳转LR,返回到被调用处的下一条指令,继续后续操作(此时的SP即为调用函数的SP)4.2举例说明栈操作过程以下以一个简单的函数调用,说明PowerPC栈的操作过程。函数例子如下:intcalltest2(inta){intt1=5;intt2=6;intresult=0;char*p=0;*p=a;}intcallte
7、st1(inta){intt1=3;intt2=4;intresult=0;result=calltest2(t2);t1=3;}voidcalltest(){intt1=7;intt2=9;intresult=0;result=calltest1(t1);t1=3;}利用反汇编工具,生成汇编代码及分析如下:intcalltest2(inta){Calltest2栈帧建立分析:stwur1,-48(r1):分配48字节的栈帧,r1指向栈顶;(powerpc省略了EBP,所以一上来即进行一次间接寻址)stwr31
8、,44(r1):保存r31的原值,以后恢复;orr31,r1,r1:让r31指向栈顶r1(r31=r1orr31)stwr3,8(r31):第一个形参0x401d4f0calltest2:stwur1,-48(r1)0x401d4f4+0x004:stwr31,44(r1)标准文档实用文案0x401d4f8+0x008:orr31,r1,r10x401d4fc+0x00c:stwr3,
此文档下载收益归作者所有