(一)blue fox -arm assembly internals and reverse engineering

书本目录

第一章:逆向工程的介绍
第二章:ELF文件格式与编译过程
第三章:操作系统基本原理
第四章:ARM架构
第五章:最常见的数据处理指令
第六章:内存访问说明
第七章:条件执行
第八章:控制流程
第九章:ARM环境
第十章:静态分析
第十一章:动态分析
第十二章:逆向ARM64 MacOs恶意软件

第一章:逆向工程的介绍

1.汇编的介绍

汇编的目的

位与字节

  1. 计算机是电子设备,根据电信号运行,信号由切换开、关两个级别之间电压产生,就需要使用一种方式表达通信、存储的这些开、关,采用二进制进行编码比较自然:01010101100。
  2. 在内存中如何确定数字的开始与结束,最简单的方法就是创建固定大小的比特分组,将一组二进制数称为一个字节
  3. IBM引入8位二进制编码十进制交换码,并出现具有8位字节的字节寻址器,字节才标准化为8位.(8位字节足以满足应用程序需要)

字符编码

  1. 计算机不仅仅使用字节来编码和处理整数,还要存储和处理人类可读的字母与数字,称为字符。
  2. 早期ASCII码确定每位使用7位,只有128种可能,然后就出现了Unicode,主要编码是UTF-8
  3. 现在使用两个十六进制数字来表示字符,如:A = 0X41 = 01000001

机器语言与汇编

  1. 从零创建计算机处理器时,自己设计自己的指令编码,将二进制模式映射到可以解释和响应的机器语言,从而创建自己的“机器语言”,由于机器语言旨在指示电路执行操作,因此这些机器代码也可被称为指令代码或者操作码
    实践中,大多数人使用的是处理器制造商定义的指令编码。在ARM上,指令编码的大小是固定的,32位或16位,具体取决于程序使用的指令集,处理器获取并解释每条指令,并依次运行每条指令以执行程序的逻辑。每条指令都是二进制模式或指令编码,遵循Arm架构定义的特定规则。
    举例:
    假设我们正在构建一个微小的16位指令集,并定义每条指令的外观。我们的第一个任务是指定编码的一部分,确切地指定要运行的指令类型,称为操作码。例如,我们可以将指令的前7位设置为操作码,并指定加法和减法的操作码,
操作 操作码
加法 0001110
减法 0001111

手工编写机器代码太繁琐,使用指令主助记符,如:ADD R0,R1

操作 操作码 主助记符
加法 0001110 ADD
减法 0001111 SUB

还需告诉两个操作数以及计算结果如:result = a + b
--等待阅读中--

posted @ 2024-09-12 09:33  Technique-Li  阅读(46)  评论(0)    收藏  举报