第一章 进制,寄存器,汇编指令(公开课)

 

一、进制
1、十进制:由0.1.2.3.4.5.6.7.8.9组成,逢十进一
2、二进制:由0.1组成,逢二进一
eg:0--0
1--1
2--10
3--11
4--100
5--101
6--110
3、十六进制:由0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F组成,逢十六进一
4、八进制
eg:2-3=?

二、exe程序

1、PE文件结构:任何一个在Windows上运行的可执行文件都要遵循的一定格式(比如exe、dll、部分sys)

了解PE结构知道程序从哪开始执行,代码存在哪,数据存在哪才能分析程序

三、硬编码

1、它是使用DTDebug来演示数字与汇编的关系

2、反汇编是将16进制数转换成汇编的过程

反汇编引擎是其相关的功能模块,是任何一款逆向分析软件的核心模块

四、逆向

逆向的过程是将二进制转换为汇编再转换为C语言的过程

五、逻辑运算(布尔运算)

逻辑运算只有两个布尔值:

  • 0 ,表示假值(False)。
  • 1 ,表示真值(True)。

1、逻辑与运算,运算规则:全一为一,有零为零。

2、逻辑或运算,运算规则:全零为零,有一为一。

3、逻辑非运算,仅有一个运算操作数,所以是一元逻辑运算。运算规则:一变零,零变一。

4、逻辑异或运算,运算规则:相异为一,相同为零。

5、逻辑同或运算,运算规则:相同为一,相异为零。

6、逻辑与非运算,运算规则:先与后非(全一为零,有零为一)。

7、逻辑或非运算,运算规则:先或后非(全零为一,有一为零)。

eg:若计算机计算2+3=多少,实现转换为0010+0011(二进制),再将两个抑或算出答案,在通过与运算算出一个数再左移一位得到的二进制判断是否为0决定算法是否算完,若=0则完毕,反之未完。

 

eg:用异或对客户端向服务器端的加密20和15

 先将20转换为二进制00100000用54的二进制异或出01110100得到74,同理将15进行加密最终得到发给服务器端的7441。

六、寄存器与内存

1、(1)寄存器是 CPU 内部用来存放数据的一些小型 存储区域 ,用来暂时存放参与运算的数据和运算结果(与cpu有关)

(2)内存是用于存放数据的硬件,又被称为主存,用于存放CPU中的运算数据以及硬盘等外部存储设备交换的数据。CPU一般会把需要运算的数据调到主存中进行运算,运算完后CPU将结果再传出来。

2、(1)区别:寄存器在cpu内部,执行速度快,但比较贵

                         内存速度较慢,成本较低,可以做的很大

(2)没有本质区别,都用于存储数据

 3、几个常用计量单位:

byte   字节    =8(bit)

word    字     =16(bit)

dword   双字  =32(bit)

4、通用寄存器的使用(EAX/ECX/EDX/EBX)

(1)MOV指令:

MOV  EAX  ,0x12345678                 (MOV是将12345678存到EAX中,12345678是立即数,0x代表是16进制)

(2)ADD指令:

ADD   EAX,1                          (将1加到EAX中)

ADD   EAX,ECX                      (将ECX加到EAX中,再存入EAX中)

(3)SUB指令:

SUB   EAX,3                             (在EAX中减3)

5、内存

1k=1024字节      1g=1024兆     1兆=1024k

1、电脑32位为寻址范围为32个1,即16进制的ffffffff(8个f)

 2、内存读写

 段寄存器主要标识属性和特征

(1)若【】中是个数,则读取内存的值填DS

(2) 若【】中有esp或ebp,则读取内存的值填SS

(3)若【】中是edi,则读取内存的值填ES

MOV EAX是要从DWORD PTR DS中读取32位的数再存到EAX中

 

七、堆栈

1、(1)本质就是内存

(2)栈是用来存储临时变量,函数传递的中间结果

(3)操作系统维护的,对于逆向程序员是透明的 

 

 

 

 2、REP指令的目的是重复执行后面的指令

八、堆栈图

(1)ESP:栈指针寄存器,其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。(基址加偏移)

即栈底指针

(2)EBP:基址指针寄存器,其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。(基址)

即栈顶指针

(3)EIP:用来存储CPU要读取指令的地址

(4)push:进栈 <入栈是在栈顶(数组的尾部)添加指定的元素>

(5)CALL:通常用来进行远过程调用,允许转移至任意地址空间。与ACALL,LCALL不同

如:call 00401005      是将eip的值改为00401005(改变最终地址)

1.push调用的(有push ESP和eip一定会变)

2.

 

LEA EDI,DWORD PTR SS:(ESP-44)           edi去地址为ESP-44的

MOV ECX,11                                                  将11存到ecx中

MOV EAX,CCCCCCCC                                     把cccccccc存到eax中

REP STOS DWORD PTR ES:(EDI)              从eid开始填东西重复11次(十进制为17次)填入cccccccc

返回值关注eax,ebp-xxx是局部变量,ebp+xxx是参数

3.pop和返回

 

posted @   Auriry  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示