汇编工具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. react实现转盘动画

    转盘动画方法如下: /** * 点击转动转盘 */ const turnCircle = () => { let runDeg = +(Math.random() * 360).toFixed( ...

  2. expected expression before')'token

    如上图所示,今天遇到的一个编译问题,明明用法跟其他地方的一摸一样,在主程序里编译就没问题,动态库里死活都编译不过去,可把我折磨死了,最后没办法,只能请教大佬,大佬过来几分钟就找到了问题,真正出错的地方 ...

  3. spring cloud alibaiba的POM引入

    POM添加spring cloud alibaba相关jar包 1 <dependency> 2 <groupId>org.springframework.boot</g ...

  4. Python生态工具

    Python内置小工具 1秒钟启动一个下载服务器 在实际工作中,时常会有这样的一个需求:将文件传给其他同事.将文件传给同事本身并不是一个很繁琐的工作,现在的聊天工具一般都支持文件传输.但是,如果需要传 ...

  5. 【转载】Python 在已存在的excel表格中写入数据

    由于每天都要汇总日报数据,其实就是个复制粘贴的工作,将多个表的数据汇总成一个表格,工作较枯燥,于是想到用Python帮我完成这个简单又粗糙的工作.写一下我学到的几个小技巧,下次忘记怎么使用的时候,还能 ...

  6. Spring Boot 中的异步调用

    通常我们开发的程序都是同步调用的,即程序按照代码的顺序一行一行的逐步往下执行,每一行代码都必须等待上一行代码执行完毕才能开始执行.而异步编程则没有这个限制,代码的调用不再是阻塞的.所以在一些情景下,通 ...

  7. HashMap中的Entry接口

    利用Entry接口,快速又方便 import java.util.HashMap; import java.util.Map; public class MapDemo { public static ...

  8. pycharm2019.3.1版本需要的JetBrains Runtime 11不支持windows 32位系统。

    提示信息显示安装pycharm2019.3.1版本需要的JetBrains Runtime 11不支持windows 32位系统. 2.更换pycharm社区版的安装版本 百度找到解决办法,参考文章& ...

  9. 读取nrf52832的ADC,并且获取N个数组中的中间值

    //****读取中间值****// short GetMedianNum(short * bArray, short iFilterLen) { short i,j,bTemp;// 排序循环 for ...

  10. 4.3Dsmax捕捉工具

    平面视图: Line 线 多用于平面视图(按住shift可创建水平或垂直的线) Cirde 圆 Arc 弧形 NGon 多边形 Text 文本 输入中文会出现方框,换一下字体即可 Egg 鹅卵形 re ...