逆向工程破解软件的一些汇编命令

来源:互联网 发布:安云网建站系统源码 编辑:程序博客网 时间:2024/05/22 16:41

请看下图,这是OD右上角窗口的“寄存器窗口”,我们先说说这个。
寄存器窗口

通用寄存器有8个,分别是:
EAX ECX EDX EBX ESP EBP ESI EDI
寄存器后面的数字,就是寄存器里储存的数值,请看下图
寄存器窗口-1
寄存器是干什么的?
EAX ECX EDX EBX 是暂时储存计算过程中所用的操作数与结果或其他信息的寄存器。

分别是干什么的?

指令 解释 EAX 累加器,算数运算的主要寄存器 ECX 计数器,在循环指令和传处理指令中当作计数器 EDX 数据寄存器,一般在做双字长运算时把 EDX 和 EAX 组合在一起放一个双字长数,EDX用来存放高位数字 EBX 基址寄存器

ESP EBP ESI EDI 它们可以像数据寄存器一样在运算过程中存放操作数,
但它们只能使用16位。其实他们通常的用途是在段内寻址时提供偏移地址。

分别是干什么的?

指令 解释 ESP 堆栈指针寄存器,表示栈顶的偏移地址 EBP 基址指针寄存器,可作为堆栈区中的基值地址以便访问堆栈中的其他信息 ESI 变址寄存器,原地址指针寄存器,一般与 EDS配合使用,有自动增减量的功能 EDI 变址寄存器,目的地址指针寄存器,一般与 EDS 配合使用,有自动增减量的功能

说完了8个通用寄存器,咱们再说说6个段寄存器:ES CS SS DS FS GS 请看下图
寄存器窗口-2
6个段寄存器,分别是干什么的?

指令 解释 CS 代码段(存放代码段的段地址) DS 数据段(存放数据段的段地址) ES 附加数据段 SS 堆栈段(存放堆栈段的段地址) FS 附加段 GS 附加段

下图的EIP里面的值,是指向CPU当前执行的代码位置。
寄存器窗口-3

还有标志寄存器没有介绍,就是下图这个东西。
我们通常看他们的值来控制跳转成功与否。
寄存器窗口-4
那他们8个又是干什么的?
他们受到比较与运算的影响来变换数值,从而让跳转成功或失败。
各种跳转成功或失败是参考那个值来判断的,请参考第一季第六集的附件,
里面有超详细的解释。

他们分别是记录什么的?

指令 解释 C 符号标志,记录运算结果的符号,结果为负数时则1,否则 0 P 奇偶标志,用来为机器中传送信息时可能产生的代码出错情况听歌检验条件。当结果操作数中 1 的个数为偶数时置 1,否则置 0 A 辅助进位标志位 Z 零标志,运算结果为 0 时 ZF 位置 1,否则置 0 S 符号标志,记录运算结果的符号,结果为负时置 1,否则置 0 T 中断允许标志位,由 CLI,STI 两条指令来控制 D 向量标志位,由 CLD,STD 两条指令来控制 O 溢出标志,在操作数超出了计算能表示的范围称为溢出

然后我们说说“寻址”的那些事
立即寻址,这种寻址方式下,操作数以常量的形式出现在指令中
比如下图,JMP lxeplaye.00402DFC
意思是无条件跳转到内存00402DFC处,其中00402DFC是立即数。这叫做立即寻址。
寻址

存储器寻址分为直接寻址与间接寻址。

直接寻址是带方括号的常量或是变量。DS是操作数默认的段寄存器。
如下图所示,BA520073处的内容与ah寄存器相加后,结果给BA520073
存储器寻址_直接寻址

寄存器间接寻址
下图内容是DS为数据段段地址,edi寄存器的内容为偏移地址,与al做比较。
存储器寻址_间接寻址

寄存器相对寻址
什么是相对寻址? 就是在间接寻址的基础上和立即数做一个加法运算。请看下图
存储器寻址_相对寻址

基址变址寻址
也很容易理解,就是基址+变址在方括号里,如下图
什么是基址,什么是变址,刚才讲过了,可以向上看。
存储器寻址_变址寻址

相对基址变址寻址
这名字真长啊,不过也很好理解。
还记得刚才的寄存器相对寻址吗?
方括号内有个立即数与寄存器做加法,就叫寄存器相对寻址。
如果没有立即数做加法,那就叫寄存器间接寻址。
然后结合我们刚才的基址变址寻址,我们在与一个立即数做加法,请看下图。
存储器寻址_ 相对基址变址寻址
前面2个寄存器相加,我们学过了,叫基址变址寻址,然后又加上一个立即数,
我们管他叫“相对”,那3个在一起,就是“相对基址变址寻址”。

另外附上一个“汇编金手指”用来查看一些汇编指令的
地址:http://pan.baidu.com/s/1o6BWMMm

0 0
原创粉丝点击