1.简介

这一篇文章参考了SPARC Overview,包含简单的进制转换、数据大小、数据对齐重要的偏移地址计算

《SPARC Overview》:https://download.csdn.net/download/weixin_38987844/12269468

2.准备知识

2.1 进制

需要掌握二进制与十六进制的相互转换以及分别的表示方法,这个就实在没有必要再复制一遍了。这里可以记录一下IDA pro中的一些进制转换的常用快捷键。

在这里面勾选要用到的数据类型,选中数据后可以使用D(DATA)、Q(16进制)、K(变量名)、B(二进制)、C(CODE)、A(ASCII)来转换数据类型

2.2 数据大小与对齐

“Main memory is byte addressable.  Addresses are 4 bytes (i.e., 32 bits), allowing for up to 4 gigabytes of memory to be addressed. Every instruction is 4 bytes (i.e., 32 bits) long.  Instructions must be word aligned.  That is, the their addresses must be divisible by 4.”

即就是说可寻址内存4G,按照4个字节对齐。指令长度是固定的,4个字节,也需要对齐。

“ Halfword, word, and doubleword data must be aligned in memory.  For example, a 4 byte word value must be placed at an address that is divisible by 4, and a doubleword must be placed at an address that is divisible by 8.  The load and store instructions will cause error exceptions if an attempt is made to move a halfword, word, or doubleword quantity to/from an address that is not properly aligned.”

对齐,这个很重要,不注意对齐算偏移就会算错,偏移算错了就会找错结构体成员,找错成员了反汇编就进行不下去了。对齐就是指x字节的数据存放的起始地址A要满足Amodx=0.举个例子:

typedef struct
{int a;double b;
}test;

那么这个结构体的两个成员的起始地址以及结构体的大小在计算时应该要注意对齐。假设test.a的起始地址是0x0,那么test.a在内存中占据了0x0-0x3,下一个字节是0x4,而下一个成员是一个double,8字节,0x4mod0x8!=0。所以应该空4个字节,test.b的起始地址为0x8。那么这个test的大小就为0x8+0x8=0x10。

这个例子比较简单,但是结构体层层嵌套的情况下计算偏移就比较难了,要随时注意对齐。按照道理说此处应该有一个工具用来计算偏移,寻找结构体成员。但是因为懒一直没有写,所以用了更多的时间在手工计算上。下面举一个更进一步的的例子:

typedef union
{double dd;int ii;
} union_test;typedef struct
{enum e;union1 u;     //start_address = 0x8int i;        //start_address = 0x10
} struct_test;    //size = 0x18

这个例子中值得注意的点一个是union的大小是最大的一个成员的大小,另外包含double 的结构体的大小要能模8=0。这就是stuct_test的大小是0x18的原因。

2.3 大小端

SPARC采用大端模式,即高位字节排放在内存低地址,低位字节排放在内存高地址

SPARC架构下的反汇编(二)——准备知识相关推荐

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

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

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

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

  3. SPARC架构下的反汇编(四)——SPARC汇编语言(二)

    1.函数栈桢(stack&frame) 函数调用时栈中分配的内存块. %fp :帧指针 %sp:栈指针 具体如图: 在IDA中,每个函数前面一部分是这样的: 函数中这样使用%fp和%sp 由上 ...

  4. CQRS架构下Equinox开源项目分析

    一.DDD分层架构介绍 本篇分析CQRS架构下的Equinox开源项目.该项目在github上star占有2.4k.便决定分析Equinox项目来学习下CQRS架构.再讲CQRS架构时,先简述下DDD ...

  5. 微服务架构下的运维知识体系

    微服务架构下的运维知识体系 基础设施与应用的标准化 微服务技术体系下的应用指的是以什么呢? 软件架构服务化的过程,就是我们根据业务模型进行细化的过程,在这个过程中切分出一个个具备不同职责的业务逻辑模块 ...

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

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

  7. 云原生架构下的 API 网关实践: Kong (二)

    Kong 是 Mashape 开源的一款云原生架构下的分布式 API 网关,其性能和可扩展性在同类组件中,表现都很优异.Kong 官方提供了很多直接可用的插件,此外,Kong 还可以通过插件扩展已有功 ...

  8. MIPS架构下LW指令的重定位过程

    通常我们不会去关心指令重定位(relocation)的细节,编译器的ld过程已经帮助我们做好了.由于最近在移植CRIU,涉及到指令的重定位计算,不得不细细研究代码重定位的细节知识.之前的文章介绍了MI ...

  9. 剖析Intel IA32架构下C语言及CPU浮点数机制

    (转载请注名原作者及出处) pdf格式下载:http://www.binghua.com/Soft/Class2/Class5/200409/63.html 剖析Intel IA32架构下C语言及CP ...

最新文章

  1. [导入]失败的软件实训课
  2. php判断目录是否有写的权限,php中判断文件空目录是否有读写权限的函数代码_php技巧...
  3. ctrl z撤销后如何恢复_回收站清空后数据如何恢复?
  4. java内存模型和内存结构_Java内存模型和优化
  5. netbeans 源文件_具有NetBeans,WebLogic 12c,JPA和MySQL数据源的Arquillian
  6. LeetCode 110. 平衡二叉树(二叉树高度)
  7. numpy随机生成01矩阵_Python数据分析Numpy库常用函数详解,提到循环就该想到的库...
  8. unix环境高级编程-文件和目录(1)
  9. 我查这么多数据,会不会把数据库内存打爆?
  10. linux文件的上传和下载(终端工具SCRT和XShell)
  11. python超链接格式_用Python在本地文件夹中插入超链接
  12. re正则表达式过滤标题特殊字符,只保留中英文及数字
  13. mysql启动黑屏_红警win10黑屏和不显示菜单栏问题 只有声音没有图像的解决
  14. Python秒算24点,行还是不行?
  15. TOEFL wordlist 28
  16. linux apple开发环境,Linux上构筑iPhone OS3.1.2开发环境 实例操作
  17. 手机加上芯片可看免费电视 明年国内将上市(图)
  18. 两步验证 非双重认证
  19. html5 m4a,Audio Unit播放aac/m4a/mp3等文件
  20. Excel:文本型日期转化为数值型日期

热门文章

  1. 手机java淘汰_极客修:对手并不止安卓!这些年iOS竟然把这么多手机系统淘汰掉了...
  2. 大数据工作流开源系统之DRAKE
  3. 柴浩然妙用三物黄芩汤
  4. 实用android 代码,Android 实用代码七段(一)
  5. Kotlin Suppress 的非常规用法
  6. android自定义渐变色,Android如何设置渐变色背景 | 夕辞
  7. 分享一个妄想山海脚本辅助,另附PHP随机数生成器代码
  8. 二、C++反作弊对抗实战 (进阶篇 —— 4.遍历进程模块(暴力扫描整个内存找出被断链的))
  9. Unity3D 程序最简单的开机启动——创建快捷方式
  10. 基于python的opencv的学习