逆向需要学习的汇编入门(一)

汇编

MASM 汇编器 链接器

32 位保护模式 64 位模式 16 位实地址模式

所有 x86 处理器都理解共同的机器语言

汇编语言不是可移植的,因为它是为特定处理器系列设计的 每一种都基于一个处理器系列

由于汇编语言占用内存少,因此它是编写嵌入式程序的理想工具

汇编语言可以用于优化应用程序的部分代码来提升速度,或用于访问计算机硬件

计算机使用的是字符集,将字符映射为整数 , 在字符模式(如 MS-DOS)下运行时,IBM 兼容微机使用的还是 ASCII(读为“askey”)字符集 .

ANSI Unicode

  • UTF-8 用于 HTML,与 ASCII 有相同的字节数值。
  • UTF-16 用于节约使用内存与高效访问字符相互平衡的环境中。比如,Microsoft Windows 近期版本使用了 UTF-16,其中的每个字符都有一个 16 位的编码。
  • UTF-32 用于不考虑空间,但需要固定宽度字符的环境中。每个字符都有一个 32 位的编码。

32 位 x86 处理器 包括了 Intel IA-32 系列中的成员和所有 32 位 AMD 处理器

x86 处理器

有三个主要的操作模式:保护模式、实地址模式和系统管理模式;以及一个子模式:虚拟 8086 (virtual-8086) 模式,这是保护模式的特殊情况。

基本程序执行寄存器(basic program execution registers)。8 个通用寄存器,6 个段寄存器,一个处理器状态标志寄存器(EFLAGS),和一 个指令指针寄存器(EIP)

指令指针(EIP)寄存器中包含下一条将要执行指令的地址。某些机器指令能控制 EIP,使得程序分支转向到一个新位置。

基本程序执行寄存器

32 位16 位8 位(高)8 位(低)
EAXAXAHAL
EBXBXBHBL
ECXCXCHCL
EDXDXDHDL

特殊用法其他通用寄存器只能用 32 位或 16 位名称来访问,如下表所示:

32 位16 位32 位16 位
ESISIEBPBP
EDIDIESPSP
特殊用法

某些通用寄存器有特殊用法

  • 乘除指令默认使用EAX。它常常被称为扩展累加器(extended accumulator)寄存器。
  • CPU 默认使用 ECX 为循环计数器。
  • ESP 用于寻址堆栈(一种系统内存结构)数据。它极少用于一般算术运算和数据传输,通常被称为扩展堆栈指针(extended stack pointer)寄存器。
  • ESI 和 EDI 用于高速存储器传输指令,有时也被称为扩展源变址(extended source index)寄存器和扩展目的变址(extended destination index)寄存器。
  • 高级语言通过 EBP 来引用堆栈中的函数参数和局部变量。除了高级编程,它不用于一般算术运算和数据传输。它常常被称为扩展帧指针(extended frame pointer)寄存器。

浮点单元(FPU, floating-point unit)执行高速浮点算术运算。之前为了这个目的,需要一个独立的协处理器芯片。从 Intel486 处理器开始,FPU 已经集成到主处理器芯片上。

浮点单元寄存器

x86 处理器按照前面讨论的基本操作模式来管理内存。保护模式是最可靠、最强大的,但是它对应用程序直接访问系统硬件有着严格的限制。

在实地址模式中,只能寻址 1MB 内存,地址从 00000H 到 FFFFFH。处理器一次只能运行一个程序,但是可以暂时中断程序来处理来自外围设备的请求 (中断处理)

在保护模式中,处理器可以同时运行多个程序,它为每个进程(运行中的程序)分配总共 4GB 的内存。 每个程序都分配有自己的保留内存区域,程序之间禁止意外访问其他程序的代码和数据。

x86-64 指令集的 64 位处理器

包括 Intel 64 和 AMD64 处理器系列 ,

  1. 向后兼容 x86 指令集。

  2. 地址长度为 64 位,虚拟地址空间为 2 64 字节。按照当前芯片的实现情况,只能使用地址的低 48 位。

  3. 可以使用 64 位通用寄存器,允许指令具有 64 位整数操作数。

  4. 比 x86 多了 8 个通用寄存器。

  5. 物理地址为 48 位,支持高达 256TB 的 RAM。

另一个为人所知的 64 位 Intel 架构是 IA-64,后来被称为 Itanium。 IA-64 指令集与 x86 和 x86-64 完全不同,Itanium 处理器通常用于高性能数据库和网络服务器。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值