1.函数栈桢(stack&frame)

函数调用时栈中分配的内存块。

%fp :帧指针

%sp:栈指针

具体如图:

在IDA中,每个函数前面一部分是这样的:

函数中这样使用%fp和%sp

由上面栈桢的知识可以知道,%fp+arg_xx,等于%fp+一个正数,等于上一层函数的%sp+xxx,所以也就是上一层函数传的参数中%o0-%o5装不下的部分。%fp+var_xx等于%fp-一个正数,这是用来存局部变量的地方。

同理可知,%sp+xxx是给要调用的函数传参数用的,首先传给%o0, %o1……%o5,每个寄存器4字节,如果还有,就继续向%sp+0x5C, %sp+0x60……依次传递。应该注意的是如果传的是double型的参数,应该一个参数占两个寄存器,所以看到的是ldd xxx, %o0, ldd xxx, %o2,%o1,%o3就看不到了。

最后,函数返回值存在%i0中,返回后变成%o0,可以从%o0中获得返回值。例如当返回值为错误代码时,返回后对%o0进行判断,以调用错误处理程序或继续执行。

2.寻址方式

寻址方式是根据指令编码中给出的地址码字段来寻找真实操作数的方式。

(1)立即寻址

操作数是直接通过指令给出,数据就包含在指令的32位编码中

(2)寄存器寻址

寄存器中的数值作为操作数,指令中地址码给出的是寄存器编号
(3)寄存器间接寻址

寄存器用“[ ]”括起来,表示内容,寄存器的值为某个存储器地址,操作数则放在该地址单元中。
(4)基址加偏址寻址

也称为变址寻址,就是将基址寄存的内容与指令中给出的偏移量(偏移地址)相加,形成存储器的有效地址,用于访问基址附近的存储器单元。偏移地址也可以是另一个寄存器。

(5)相对寻址

基地址为程序计数器PC的变址寻址,偏移量指出了目的地址与现行指令之问的相对位置,偏移量与PC提供的基地址相加后得到有效的目的地址。

看起来比较复杂实际上在看汇编代码就很清晰易懂。学过8086寻址方式基本就能看懂SPARC的寻址方式。

3. 分支指令延时间隙

分支语句执行前,紧跟分支指令后面的指令先被执行。

在跳转指令的延时间隙里不方便放有用的指令的情形时,SPARC提供 了“nop”复合指令。nop的执行,它不改变任何寄存器或内存的值。

用加后缀“,a”来声明跳转间隙无效。如果条件分支指令没有发生(不跳转),则跳转间隙中的指令无效(不执行)。

例如:

cmp %g1, 0
bne,a icc, loc_1C354
inc %l1

当判断%g1是否等于0后,根据情况判断是否跳转。如果不等于零则跳转,则跳转前执行inc%l1。如果等于零则不跳转,同时也不执行inc %l1。如果bne后面没有", a"则无论是否跳转都要先执行inc %l1。

SPARC架构下的反汇编(四)——SPARC汇编语言(二)相关推荐

  1. SPARC架构下的反汇编(一)——SPARC简介

    1. 写作目的&个人水平 之前做过SPARC架构下的反汇编项目,但资料比较少,所以写一点笔记,结合已有的资料以及个人的经验以便于查阅.总体来说就是资料的阅读理解和实际操作的经验.因为水平有限, ...

  2. SPARC架构下的反汇编(三)——SPARC汇编语言

    1.Load&Store Architecture (存取架构) SPARC架构只能对存储在寄存器中的数据执行运算(例如算术和逻辑功能).需要使用单独的指令将数据从存储器移至寄存器(Load) ...

  3. SPARC架构下的反汇编(二)——准备知识

    1.简介 这一篇文章参考了SPARC Overview,包含简单的进制转换.数据大小.数据对齐到重要的偏移地址计算 <SPARC Overview>:https://download.cs ...

  4. 甲骨文与富士通利用SPARC架构打造M12超级设备

    甲骨文与富士通两家公司已经共同发布富士通的SPARC M12服务器,并宣称这将是全球拥有最强每核心性能的解决方案. 这台产品为原有M10服务器的补充性版本,其中富士通M10-4S服务器拥有64块处理器 ...

  5. Sparc架构中的栈与寄存器

    寄存器的基本结构 通用整数寄存器 在sparc架构中,同一时刻可以使用的整数寄存器为32个,如下图所示,其中8个为一组,除了一组全局寄存器(%g1-g7)外,其余的3组寄存器组成了一个寄存器窗口,在不 ...

  6. Re:从 0 开始的微服务架构--(四)如何保障微服务架构下的数据一致性--转

    原文地址:http://mp.weixin.qq.com/s/eXvoJew3bjFKzLLJpS0Otg 随着微服务架构的推广,越来越多的公司采用微服务架构来构建自己的业务平台.就像前边的文章说的, ...

  7. ASP.NET Core Web API下事件驱动型架构的实现(四):CQRS架构中聚合与聚合根的实现

    在前面两篇文章中,我详细介绍了基本事件系统的实现,包括事件派发和订阅.通过事件处理器执行上下文来解决对象生命周期问题,以及一个基于RabbitMQ的事件总线的实现.接下来对于事件驱动型架构的讨论,就需 ...

  8. AUTOSAR从入门到精通100讲(四十二)-Autosar架构下的模块详细设计及代码实现--基于配置的编程方法

    1.Autosar静态代码和动态代码 Autosar架构下的静态代码(Static)可以理解为不可变(由工具商编写维护)的代码,根据配置进行逻辑/算法处理以及状态机的维持及跳转等.动态(Dynamic ...

  9. Windows下x64反汇编参数传递约定,一句话,调用顺序为从左到右, Function( rcx, rdx, r8,r9, [rsp+0x20], [rsp+0x28], [rsp+0x30]..

    Windows下x64反汇编参数传递约定 一句话,调用顺序为从左到右,  Function( rcx, rdx, r8,r9, [rsp+0x20], [rsp+0x28], [rsp+0x30], ...

最新文章

  1. Java虚拟机学习(2):垃圾收集算法
  2. 数据中心水环热泵余热回收系统分析与应用
  3. 把docker当做绿色打包工具
  4. Android RotateAnimation详解
  5. 请不要做浮躁的嵌入式系统工程师(谨以此文与大家共勉)
  6. Jdk 和 jre 的 关系和区别
  7. python开发效率高吗_从运行效率与开发效率比较Python和C++
  8. 每日一题 2020.05.26
  9. Pivot与Center的区别
  10. robocode 创建机器人
  11. 火狐浏览器安装有道翻译插件
  12. 苹果手机如何查看已经连接过的WIFI密码?
  13. OpenDDS制作编译idl文件之一
  14. Android APP在线自动更新安装
  15. Vue进阶(幺贰叁):v-for 实现一行展示 n 个元素
  16. (13)web安全|渗透测试|网络安全 注入/跨库查询/文件读写/常见的防护原理 详细图解
  17. 22web app实现左右滑动控制菜单
  18. Unity2D 实现UGUI滚动鼠标滑轮以鼠标位置点为中心缩放图片
  19. 使用adb命令卸载Android的apk软件失败
  20. VIVADO与Matlab版本对照表

热门文章

  1. Mr.Go 会客厅第二期,B站+斗鱼“后浪” Gopher 火花四溅!
  2. 组装计算机主机算固定资产吗,​购买电脑配件组装电脑属于固定资产吗
  3. android 照片变油画,最近很火照片变油画Glaze软件
  4. 计算机网络实验--Cisco Packet Tracer 实验
  5. 金蝶全渠道营销列车,邀请您上车
  6. Android系统打不开,安卓手机打不开pdf文件怎么解决?
  7. STM32H7 BDMA应用示例
  8. 亚马逊广告投放策略卖家们知多少?
  9. 在线文档编辑插件——KindEditor
  10. CSDN学霸课表——把Word的默认背景颜色由白色改为绿色