0
点赞
收藏
分享

微信扫一扫

x86汇编语言基础知识

佛贝鲁先生 2022-04-17 阅读 84
安全

文章目录


x86汇编语言必备知识
x86汇编语言主要包括总线、寄存器结构,数据类型,基本的操作指令(包括数据传送指令、逻辑计算指令、算数运算指令),以及函数的调用规则。

具体内容可以查看这个博客https://www.cnblogs.com/jiftle/p/8453106.html

内存

一个程序内存主要分为以下四个节:
在这里插入图片描述
:用于函数的局部变量和参数,以及控制程序执行流。
:为程序执行期间需要的动态内存准备的,用于创建(分配)新的值以及消除(释放)不需要的值。也称动态内存。
代码:包含了执行程序任务时CPU取得的指令。决定了程序要做什么和怎么做。
数据:包含一些值,这些值在程序初始加载时被放到这里。称为动态值,因为程序运行时他们可能并不发生变化。也称全局值,因为程序任何部分都可以使用它们。

总线

  • 地址总线的宽度决定CPU的寻址能力。一个CPU有N根地址总线,最多可以寻找2N内存单元(B)
  • 数据总线的宽度决定CPU与其他器件进行数据传送时的一次数据传送量。一个CPU有N根数据总线,一次可传送一个N位二进制数据。如:数据总线的宽度为8根则可传送1B的数据。
  • 控制总线的宽度决定CPU对系统中其他器件的控制能力。有多少根控制总线,意味着CPU提供了多少种对外部器件的控制。

寄存器

寄存器是可以被CPU使用的少量数据存储器,访问其中的内容的速度会比访问其他存储器要快。分为以下四类

通用寄存器

X86处理器中有8个32位的通用寄存器。

段寄存器

用于定位内存节

状态标志

标志寄存器,置位值为1或者清除值为0,这些值由CPU控制

EIP指令指针

在x86中,EIP寄存器又称指令指针或程序计数器,保存了程序将要执行的下一条指令在内存中的地址。EIP的唯一作用就是告诉处理器接下来要做什么。

数据表示

在x86/x64体系中,指令处理的数据分为fundamental(基础)和numeric(数值)两大类。

基础(fundamental)类型

数据(numeric)类型

x86基本操作指令

!注意:在分析恶意代码时,如果遇到一个函数只有xor、or、and、shl、ror、shr、rol等这样的指令并且反复出现·看起来像随机排列的样子,最可能是遇到了加密或者压缩的函数!

指令格式

在这里插入图片描述
指令前缀
例子:
在这里插入图片描述
红框为指令前缀(冒号前),粉框为操作码

ModR/M:辅助说明操作码的操作数(操作数的个数、种类[寄存器、内存地址、常量])

SIB:辅助说明ModR/M,辅助寻址。操作码的操作数为内存地址时,需要与ModR/M一起使用

位移:操作码的操作数为内存地址(小端序排列)时,用来表示位移操作
在这里插入图片描述
立即数:操作码的操作数为常量时,该常量就被称为立即数
在这里插入图片描述

每条指令使用操作码告诉CPU程序要执行什么操作。反汇编器将操作码翻译为人类容易读懂的指令。
如:指令mov ecx,0x42的操作码是B9 42 00 00。mov ecx对应B9,0x42对应42 00 00。在这里插入图片描述
字节序
!注意网络数据使用大端字节序,x86使用小端字节序。

如:网络上IP地址为127.0.0.1是0x7f000001,在x86小端字节序则是0x0100007f
在分析代码时,必须了解字节序哟,不然会将重要数据弄反的!

操作数

操作数分为三个类型:

位移:操作码的操作数为内存地址(小端序排列)时,用来表示位移操作
在这里插入图片描述

立即数:操作码的操作数为常量时,该常量就被称为立即数
在这里插入图片描述

操作数指向寄存器

常用指令可以查看这个https://zhuanlan.zhihu.com/p/53394807

举报

相关推荐

0 条评论