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

news/2024/10/4 9:24:25

 

一、进制
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和返回

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/44322.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

洛谷 P1216 数字三角形

题目链接:数字三角形思路dp:金字塔顶的元素为起点,金字塔每行的最左侧数字只能从上一层的最左侧数字到达,如7 -> 3 -> 8 -> 2 -> 4,这些数字中的每一个(除起点7外)都只能从上一层的最左侧数字到达,递推公式为dp[i][1] = max(dp[i][1], num[i][1] + dp[i - …

Qt/C++音视频开发77-获取本地有哪些摄像头名称/ffmpeg命令日志方式

一、前言 上一篇文章讲使用ffmpeg函数接口去获取本地摄像头信息,这种方式只能从ffmpeg5版本开始才具备,那ffmpeg3/4只能干瞪眼?那肯定不行的,必须要想办法打通这个功能,查阅信息发现可以执行命令 ffmpeg -f dshow -list_devices true -i dummy 去获取,会通过日志打印出来…

ants:强大的高性能与低成本 Go 协程池

ants:强大的高性能与低成本 Go 协程池 原创 K8sCat 源自开发者 2024-06-16 11:28 广东 听全文源自开发者 专注于提供关于Go语言的实用教程、案例分析、最新趋势,以及云原生技术的深度解析和实践经验分享。 256篇原创内容公众号在开发高并发程序时,管理并发的能力至关重要。在…

app专项测试

过滤: 过滤表达式: domain. 展示 domain 中的资源, *.comhas-response-header. 包含指定 HTTP 响应 headeris. 表达式larger-than. 展示大于某个尺寸的资源,1000 等于 1kmethod. 指定http请求方法,比如 get 或者 postmime-type. 资源 mime 类型,比如 application/jsonsch…

goland的启动配置

参考:https://www.cnblogs.com/laijinquan/p/11968410.html 纯记录,如图

POS机SQL server数据库修复

今天这个案例,是烟酒店的老板,一台超市收银系统损坏了,资讯云的管理系统描述的就是开机进不了系统,找不到硬盘,导致数据呢无法访问,索性能进去,可能也运行不了几分钟就直接关机或者是死机,一定要保证数据万无一失,它里面有一些销售的一些记录报表,包括一些会员卡的情…

BitLocker加密分区丢失了如何恢复?

关于BitLocker加密分区丢失与恢复BitLocker是Windows操作系统提供的磁盘加密技术,可以更好的保护电脑中的数据。被BitLocker加密后的分区,在文件管理器中可以看到分区上会有个黄色的锁(如下图所示),双击该分区,会弹出窗口要求输入密码或是秘钥。输入正确的密码/秘钥后,即…