首页 > 编程语言 >第一章 进制,寄存器,汇编指令(公开课)

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

时间:2024-06-16 13:43:58浏览次数:13  
标签:运算 EAX -- 公开课 内存 寄存器 指针 进制

 

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

 

标签:运算,EAX,--,公开课,内存,寄存器,指针,进制
From: https://www.cnblogs.com/Lyjia-n/p/18227761

相关文章

  • 定时器寄存器1
    文章目录定时器工作方式选择寄存器TMODTMOD的各位定义工作方式选择位定时器工作方式选择寄存器TMODTMOD的各位定义工作方式选择位......
  • GPIO介绍+点灯(寄存器+HAL库)
    1.GPIO概述GPIO(General-purposeinput/output):通用型输入输出。简单理解就是我们可以控制输入输出的STM32引脚,统称为GPIO。GPIO存在的意义就是用程序控制或读取他们的输出或输入。1.1.GPIO总体说明STM32有多组GPIO,比如我们使用的芯片:STM32F103ZET6共有7组GPIO端口,他们......
  • [BUUCTF_Misc]乌镇峰会种图,但十六进制对应文本乱码
    题目地址:BUUCTF乌镇峰会种图使用工具:edge浏览器、HxDHexEditor主要问题:edgeimageviewer保存图片后用十六进制编辑器打开,对应文本中含有大量乱码问题状态:题已做完,但不懂为什么点击附件后默认在edge浏览器的edgeimageviewer中查看图片,鼠标右键另存为图像。单看图片感觉......
  • Java IO流(二进制IO流、文本IO流)
    JavaIO流(Input/OutputStream)是Java中用于处理输入输出操作的一种机制。IO流可以从不同的数据源读取数据,或者将数据写入到不同的目标。根据处理的数据类型,IO流可以分为二进制IO流和文本IO流。一、二进制IO流: 二进制IO流主要用于处理非文本数据,如图片、音频、视频等。在J......
  • 【Java】 将字节数组转换为十六进制字符串:Java实现指南
    >>【痕迹】QQ+微信朋友圈和聊天记录分析工具>>(1)纯Python语言实现,使用Flask后端,本地分析,不上传个人数据。>>(2)内含QQ、微信聊天记录保存到本地的方法,真正实现自己数据自己管理。>>(3)数据可视化分析QQ、微信聊天记录,提取某一天的聊天记录与大模型对话。>>下载地......
  • 二进制翻转、结构体指针
    试写一个函数,传入一个参数unsignedcharnum,把num按位进行整个数值翻转。规则:使用位运算,不能另外使用变量存储,写出最优的方案。例:num二进制为10010111;翻转后num二进制是11101001unsignedcharreverseBitsChar(unsignedcharch){    ch=(ch&0x55)<<1|(ch>>1)......
  • MDK5.14仿真STM32F407时无法查看外设寄存器的问题
    这几天用keilmdk5.14新建工程进行仿真时,进入Debug环境发现SystemViewer菜单显示空白,Peripherals菜单没有外设寄存器。如图1和图2所示。网上查了一下资料发现大多都是解释的STM32F103系列在MDK内的修改方式,但是我用的是STM32F407ZET6,就依葫芦画瓢,照着出一个修改的说明。  ......
  • 在Linux中,如何将二进制文件添加到 $PATH 变量中?
    在Linux系统中,$PATH是一个环境变量,它定义了操作系统在执行命令时搜索可执行文件的目录。要将一个二进制文件添加到$PATH中,你可以按照以下步骤操作:找到二进制文件的路径:首先,你需要知道二进制文件的确切位置。使用which命令或者find命令来查找文件的位置。例如:whichyou......
  • Python项目打包二进制文件并发布
    复制项目生成二进制文件(交叉编译???)重命名二进制文件生成pyi文件(编译器智能提示需要删除原始py文件(复制后的)项目打包上传(分版本分平台???)流程、代码待完善二进制文件生成pipinstallcpython#setup.pydeffind_pyx_files(directory):pyx_files=[]forroot,_......
  • 关于如何设置 TMOD (定时/计数 高低 共 8 位 寄存器)
    TMOD寄存器简介TMOD是8051单片机的定时器模式寄存器。它是一个8位寄存器,用于配置定时器/计数器的工作模式。TMOD的每一位有特定的含义。TMOD的结构如下:GATE|C/T|M1|M0|GATE|C/T|M1|M07|6|5|4|3|2|1|0GATE(位7和......