恶意代码分析入门系列之 - 基础知识

0x00 前言

在第一小节完成了环境的搭建,成功搭建好了一个可用于恶意样本分析的虚拟机环境,在这小节,先介绍一些关于恶意样本的相关知识,也算是为恶意样本分析做准备。

首先,我没有写详细的汇编教程,论坛中有非常多的汇编教程,读者可以多多利用论坛的搜索功能,找到一些相关的知识点。大多数情况来说,遇到的问题之前都有人在论坛中求问过,只是措辞和询问的方式不一样,大家遇到问题的时候可以先利用论坛的搜索功能或结合google进行搜索。

为了不让之后的内容过于抽象,在本小节中介绍基础的汇编知识。

0x00 汇编基础内容

寄存器相关

简单来说,寄存器是CPU内部用于存放数据的小型存储区域,寄存器是内存与CPU能够交互的一个关键。

以x86为例,常见的有8个通用寄存器。

EAX    eax是累加器,在做加法和乘法运算的时候,eax是默认寄存器    

EBX    ebx是基地址寄存器,通常被用于寻址    

EXC    ecx是计数器,通常用于循环计数    

EDX    edx通常用于存放除法运算产生的余数    

ESI     esi是源寄存器,通常在字符串操作中使用

EDI    edi与esi对应,edi表示目标寄存器    

EBP    ebp是基址指针,通常用于指向栈底    

ESP    esp是堆栈指针,与ebp对应,通常指向栈顶。

还有一些特殊的寄存器,刚开始的时候不用掌握那么多,后面遇到再去学习就行。

eax ebx exc edx 这四个寄存器,除了本身自带的一些功能,他们还常常被用于一些运算。
开发人员可以直接使用一些汇编指令去操作这几个寄存器实现一些简单的功能,需要注意的是,eax寄存器还有一个存放函数返回值的功能。
在大多数情况下,一个函数调用完成之后,返回值都会保存在EAX寄存器中

后面的esi和edi通常会配合数据段寄存器DS来使用,通常情况下,我们不会动esi和edi的值。

esp和ebp分别用于指向栈顶和栈底,是两个特别关键的寄存器。esp和ebp涉及到操作系统中一个最基础的概念"堆栈"。

说是堆栈,其实是指栈,当我们描述堆的时候都会直接说堆。

栈的原理其实很简单,从C语言的角度来看,栈是一种数据结构,先入后出。从计算机系统来看,栈是一个具有先入后出属性的动态内存区域。程序可以将数据压入栈中,也可以将数据从栈顶弹出。可以说我们所见到的函数调用,基本上都是跟栈挂钩的。

上一篇:第 54 题:var、let、const 有什么区别?


下一篇:OpenEuler 中C与汇编的混合编程