汇编工具DTDebug

下载后设置好odd与插件路径,同时在属性中设置为管理员身份运行(无Administrator权限进入的时候一直在提示)

寄存器

存储数据:

CPU>内存>硬盘

32位CPU: 8 16 32

64位CPU: 8 16 32 64

EIP:存储CPU下一次执行的指令集,不能作他用

通用寄存器

32位寄存器

32位 16位 8位
WAX AX AL(低8位)
ECX CX CL
EDX DX DL
EBX BX BL
ESP SP AH(高8位)
EBP BP CH
ESI SI DH
EDI DI BH

8位,16位寄存器同时存在于32位之中,8位指令改32位中的1位,16位改4位

MOV指令

  1. 立即数到寄存器

  2. 寄存器到寄存器

  3. 寄存器到内存

  4. 内存到寄存器

    MOV EAX,1//把1存储到EAX寄存器
    MOV EDX,EAX//把EAX里面的值存到EDX

内存相关

mov byte ptr ds[存储地址]

已经申请过的地址,在堆栈窗口内找,可以直接使用

一个字节-Byte

两个字节-WORD

四个字节-DWORD

MOV DWORD PTR DS:[],EAX//前提需要保证宽度相同

内存地址的5种形式

  1. [立即数]

    读取内存的值:

    MOV EAX,DWORD PTR DS:[0x13FFC4]

    向内存写入数据

    MOV DWORD PTR DS:[0x13FFC4],EAX
  2. [reg] reg代表寄存器 可以是8个通用寄存器中的一个

    读取内存的值:

    MOV ECX,0x13FFD0
    MOV EAX,DWORD PTR DS:[ECX]

    向内存中写入数据:

    MOV EDX,0x13FFD8
    MOV DWORD PTR DS:[EDX],0x87654321
  3. [reg+立即数]

    读取内存的值:

    MOV ECX,0x13FFD0
    MOV EAX,DWORD PTR DS:[ECX+4]

    向内存中写入数据:

    MOV EDX,0x13FFD8
    MOV DWORD PTR DS:[EDX+0xC],0x87654321
  4. [reg+reg*{1,2,4,8}] (数组的汇编形式)

    代表八个32位的寄存器加上八个32位寄存器乘以1,2,4,8

    读取内存的值:

    MOV EAX,13FFC4
    MOV ECX,2
    MOV EDX,DWORD PTR DS:[EAX+ECX*4]

    向内存中写入数据:

    MOV EAX,13FFC4
    MOV ECX,2
    MOV DWORD PTR DS:[EAX+EAX*4],87654321
  5. [reg+reg*{1,2,4,8}+立即数]

    读取内存的值:

    MOV EAX,13FFC4
    
    MOV ECX,2
    
    MOV EDX,DWORD PTR DS:[EAX+ECX*4+4]

    向内存中写入数据:

    MOV EAX,13FFC4
    MOV ECX,2
    MOV DWORD PTR DS:[EAX+ECX*4+4],87654321

数据的存储模式

大端模式:数据高位在低位,数据低位在高位

小端模式:数据低位在低位,数据高位在高位

MOVS指令

BYTE/WORD/DWORD分别简写为MOVSB MOVSW MOVSD

MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]

DF位置:每次MOVS指令之后地址减少相应变更(加减具体看DF的值)字节的地址

DF的值表示方向位:0为+,1为-

STOS指令:将AL/AX/EAX的值存储到[EDI]的指定存储单元

STOS BYTE PTR ES:[EDI]

REP指令

MAV ECX,10

REP MOVESD//ECX作为REP指令的计数器

EAX通常用作返回值

ESP,EBP通常用作堆栈

ESI,EDI通常用作串复制的首地址和目标地址

堆栈相关指令

堆栈的使用是从大地址向小地址使用

ESP 栈指针寄存器

堆栈的使用

堆栈使用之后要改变ESP指向的位置,防止被覆盖

例如:

SUB ESP,8

使用之后取消:

ADD ESP,8

心得

C语言当中局部变量为何赋初始值的原因也就昭然若揭了,因为在内存中ESP寄存器只是指向了未被使用的堆栈,堆栈里面的内容会被覆盖,但是不会被清空,因此创建变量以后他的初始值是未知的,因此创建局部变量需要赋初值

PUSH&POP指令

功能:

  1. 将数压入栈顶
  2. 栈顶指针+1
PUSH DWORD PTR DS:[18FFA4]
POP EAX
POP ECX

修改EIP的指令

KMP指令

MOV EIP简写为JMP

CALL指令

CTF-RE-学习记录-汇编-2的更多相关文章

  1. Java 静态内部类与非静态内部类 学习记录.

    目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...

  2. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  3. Apache Shiro 学习记录4

    今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...

  4. UWP学习记录12-应用到应用的通信

    UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...

  5. UWP学习记录11-设计和UI

    UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...

  6. UWP学习记录10-设计和UI之控件和模式7

    UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...

  7. UWP学习记录9-设计和UI之控件和模式6

    UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...

  8. UWP学习记录8-设计和UI之控件和模式5

    UWP学习记录8-设计和UI之控件和模式5 1.日历.日期和时间控件 日期和时间控件提供了标准的本地化方法,可供用户在应用中查看并设置日期和时间值. 有四个日期和时间控件可供选择,选择的依据如下: 日 ...

  9. UWP学习记录7-设计和UI之控件和模式4

    UWP学习记录7-设计和UI之控件和模式4 1.翻转视图 使用翻转视图浏览集合中的图像或其他项目(例如相册中的照片或产品详细信息页中的项目),一次显示一个项目. 对于触摸设备,轻扫某个项将在整个集合中 ...

  10. UWP学习记录6-设计和UI之控件和模式3

    UWP学习记录6-设计和UI之控件和模式3 1.按钮 按钮,响应用户输入和引发 Click 事件的控件. 使用<Button>就能创建一个按钮控件了.按钮是 ContentControl, ...

随机推荐

  1. mysql允许root用户在任何地方进行远程登录,并具有所有库任何操作权限

    在本机先使用root用户登录mysql: mysql -u root -p"youpass" 进行授权操作: mysql>GRANT ALL PRIVILEGES ON *. ...

  2. python中列表,字典,字符串常用操作

    1. 列表操作 分类 关键字 / 函数 / 方法 说明 增加 列表.append(值) 在末尾追加值   列表.insert(索引, 值) 在指定位置插入值, 超过索引会追加值   列表.extend ...

  3. 关闭Google自动更新

    一.禁用任务计划 二.禁用更新服务 三.重命名更新程序 首先找到谷歌浏览器的安装位置

  4. nrm ls报错及npm镜像站点测速、切换

    报错截图: 解决方法: 1.win键,搜索powershell,点击"以管理员身份运行" 2.粘贴下面命令,回车,敲y,回车 set-ExecutionPolicy RemoteS ...

  5. spark命令

    spark提交任务命令 集群方式: ./bin/spark-submit  --master spark://localhost:7077 --class 类 /home/cjj/testfile/f ...

  6. idea中 .gitignore文件的使用

    idea中 .gitignore文件的使用 首先保证当前的所有文件都没有被git追踪 如果被追踪,建议先取消git的版本控制 输入如下指令 find . -name ".git" ...

  7. 【线性DP】乌龟棋

    #include<bits/stdc++.h> using namespace std; int a[400],b[5]; int dp[50][50][50][50]; int main ...

  8. Maven 中央仓库配置

    Maven 中央仓库配置 Maven 中央仓库地址大全 <!-- 1.阿里中央仓库(首推1) --> <repository> <id>alimaven</i ...

  9. k8s ingress

    ingress   ingress为k8s集群中的服务提供了入口,可以提供复制均衡,ssl终止和基于名称的虚拟主机,再生产环境中,常用的ingress有Treafik,Nginx,HAProxy,Is ...

  10. idea远程仓库无法更新导致的各种错误,jar包无法下载

    直接把下面的配置替换成settings.xml中的内容 <?xml version="1.0" encoding="UTF-8"?> <set ...