汇编学习记录

news2025/1/22 15:45:23

前言

这篇文章是自己在专升本录取~本科开学前学习记录,破解软件的学习在2022年4月 - 2022年5月,汇编学习时间大约为2022年7月 - 2022年9月,我将往期上传的博文整理为一篇文章,作为归纳总结。
以后若继续学习相关领域,此文会更新。


文章目录

  • 前言
  • 一、破解
    • 1.OD软件界面基本介绍
    • 2. 破解软件实战
  • 二、汇编
    • 1.计算123*236(十进制)结果存放在AX中
    • 2.用编程求FFFF:0到FFFF:F字节型数据的和,结果存放在dx中
      • (1) 代码
      • (2)debug关键步骤
    • 3.将内存FFFF:0 ~ FFFF:F 内存单元中的数据复制到 0:200 ~ 0:20F 中
      • (1)代码
      • (2)改进
      • (3)改进
    • 4.向内存0:200 ~ 0:23F 依次传送数据 0~63(3FH),只能使用9条指令 20:00 3f
    • 5.编程计算下面8个数据的和,结果放在ax寄存器中
    • 6.(章节7.10) 不同寻址方式的灵活应用
      • (1)将datasg段中每个单词改为大写字母
      • (2)将datasg段中每个单词的前4个字母改为大写字母
      • (3)(章节8.6)寻址方式的综合应用
    • 7.(章节8.7).div
    • 8.用div计算data段中的第一个数据除以第二个数据,商存放在第三个数据的存储单元中
    • 9.(章节8.9)dup指令
  • 总结


一、破解

时间:2022年4月15日

1.OD软件界面基本介绍

在这里插入图片描述


本章链接:OD零基础入门教程_哔哩哔哩_bilibili
OD:即ollydbg

前言:本节是软件的基本介绍,以图片+注释的方式作为笔记。

放到这里,可供跟我一样的小白一块参考。

祝愿一起进步。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2. 破解软件实战


教程点击此处

补充知识:
1.搜索关键字方法
插件 -> 中文搜索引擎 -> ASCLL -> ctrl+F

右击 -> 二进制 -> nop填充

右击 -> 复制到可执行文件 ->全部复制

右击弹出来的窗口 -> 保存。

有壳的只能做补丁,

没壳的可以保存。

二、汇编

时间:2022年7月~2022年9月

1.计算123*236(十进制)结果存放在AX中

assume cs:code

code segment
;用编程进行加法计算123*236(十进制)结果存放在AX中
;eg: 10*3 = 10 + 10 + 10

	mov ax,123	;设置为123合适 cs即循环次数
				;循环次数少时间复杂度低
	mov cx,ax
	mov ax,0

addNumber:	
	add ax,236
	loop addNumber


	

	mov ax,4c00h
	int 21h
	
code ends
end

2.用编程求FFFF:0到FFFF:F字节型数据的和,结果存放在dx中

(1) 代码

assume cs:code

code segment
;	用编程求FFFF:0到FFFF:F字节型数据的和,
;结果存放在dx中

;1.做好初始化。即使默认为0
;2.注意数据从哪里来,到哪里去

	mov ax,0ffffh	
	mov ds,ax	;数据来源

	mov bx,0	;偏移地址
	
	mov dx,0	
	mov cx,16 	;循环16次
	
	mov ax,0	;ah=0,al读取字节型数据,ax与dx相加
	
	addNumber:
	mov al,ds:[bx]	;取数据
	add dx,ax
	inc bx
	loop addNumber

	mov ax,4c00h
	int 21h
	
code ends
end

0588h

(2)debug关键步骤

该处使用的url网络请求的数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.将内存FFFF:0 ~ FFFF:F 内存单元中的数据复制到 0:200 ~ 0:20F 中

(1)代码

assume cs:code

code segment
;	将内存FFFF:0 ~ FFFF:F 内存单元中的数据复制到 
;	0:200 ~ 0:20F 中

;	分析:目标地址可看做段地址20h,偏移地址0~f


	mov bx,0	;偏移地址
	
	mov dx,0	
	mov cx,16 	;循环16次
	
	
	
	addNumber:
	mov ax,0ffffh	
	mov ds,ax	;数据来源
	mov dx,ds:[bx]	;取数据
	
	mov ax,20h
	mov ds,ax
	mov ds:[bx],dx
	inc bx
	
	loop addNumber

	mov ax,4c00h
	int 21h
	
code ends
end

在这里插入图片描述

(2)改进

上面需要不断地修改段地址寄存器,是一种很浪费CPU的操作

assume cs:code

code segment
;	将内存FFFF:0 ~ FFFF:F 内存单元中的数据复制到 
;	0:200 ~ 0:20F 中

;	分析:目标地址可看做段地址20h,偏移地址0~f

;	es寄存器和数据相关
;	习惯:
;	ds代表数据来源,es代表数据去向

	
	mov ax,0ffffh	
	mov ds,ax	;数据来源
	
	mov ax,20h
	mov es,ax
	
	mov bx,0	;偏移地址
	
	mov cx,16 	;循环16次
	
	
	
	addNumber:
	mov dl,ds:[bx]	
	mov es:[bx],dl
	inc bx
	
	loop addNumber

	mov ax,4c00h
	int 21h
	
code ends
end

在这里插入图片描述

(3)改进

前面是用字节形数据,现在是用字形数据,循环8次,比原先减少了一半。

assume cs:code

code segment
;	将内存FFFF:0 ~ FFFF:F 内存单元中的数据复制到 
;	0:200 ~ 0:20F 中

;	分析:目标地址可看做段地址20h,偏移地址0~f

;	es寄存器和数据相关
;	习惯:
;	ds代表数据来源,es代表数据去向

	
	mov ax,0ffffh	
	mov ds,ax	;数据来源
	
	mov ax,20h
	mov es,ax
	
	mov bx,0	;偏移地址
	
	mov cx,8 	;循环8次
	
	
	
	addNumber:
	mov dx,ds:[bx]	
	mov es:[bx],dx
	;push ds:[bx]
	;pop es:[bx]

	add bx,2
	
	loop addNumber

	mov ax,4c00h
	int 21h
	
code ends
end

在这里插入图片描述

4.向内存0:200 ~ 0:23F 依次传送数据 0~63(3FH),只能使用9条指令 20:00 3f

assume cs:code

code segment
;向内存0:200 ~ 0:23F 依次传送数据 0~63(3FH)
;只能使用9条指令 20:00 3f 
	
	mov ax,20h
	mov ds,ax
	mov bl,0h
	mov cx,64
	
	
	Number:	mov ds:[bx],bl
	inc bl
	loop Number
	
	

	mov ax,4c00h
	int 21h
	
code ends
end

在这里插入图片描述

5.编程计算下面8个数据的和,结果放在ax寄存器中

assume cs:code

code segment

;编程计算下面8个数据的和,结果放在ax寄存器中
1,2,3,4,5,6,7,8


	dw 1,2,3,4,5,6,7,8
	
	
start:	mov bx,0
	mov ax,0
	
	mov cx,8
	
	addNumber:
	add ax,cs:[bx]
	add bx,2
	loop addNumber



	mov ax,4c00h
	int 21h
	
code ends

end start

在这里插入图片描述

6.(章节7.10) 不同寻址方式的灵活应用

(1)将datasg段中每个单词改为大写字母

assume cs:codesg,ds:datasg

datasg segment
	db 'file            '
	db 'edit            '
	db 'sear            '
	db 'view            '
	db 'view            '
	
	dw 0	;50h
datasg ends


codesg segment
start:
	mov ax,datasg
	mov ds,ax
	
	mov cx,5
	mov bx,0
	
upRow:	
	mov ds:[50h],cx
	mov si,0
	mov cx,4
	
upletter:
		mov al,[bx+si]
		and al,11011111b
		mov [bx+si],al
		inc si
		loop upletter
		
	mov cx,ds:[50h]
	add bx,16
	loop upRow
	

	
	
	mov ax,4c00h
	int 21h
	
codesg ends

end start
	

以栈的方式

assume cs:codesg,ds:datasg

datasg segment
	db 'file            '
	db 'edit            '
	db 'sear            '
	db 'view            '
	db 'view            '
	
datasg ends


stack segment
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
stack ends


codesg segment
start:
	mov ax,stack
	mov ss,ax
	mov sp,32
	
	
	mov ax,datasg
	mov ds,ax
	
	mov cx,5
	mov bx,0
	
upRow:	
	push cx	;保存到栈中
	mov ds:[50h],cx
	mov si,0
	mov cx,4
	
upletter:
		mov al,[bx+si]
		and al,11011111b
		mov [bx+si],al
		inc si
		loop upletter
		
	pop cx
	add bx,16
	loop upRow
	

	
	
	mov ax,4c00h
	int 21h
	
codesg ends

end start
	

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)将datasg段中每个单词的前4个字母改为大写字母

assume cs:code,ss:stack,ds:data


stack segment
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
stack ends

data segment
	db '1. display      '
	db '2. brows        '
	db '3. replace      '
	db '4. modify       '
data ends

code segment
	start:
	mov ax,stack
	mov ss,ax
	mov sp,32
	
	mov ax,data
	mov ds,ax
	
	mov bx,0
	mov cx,4
	
upRow:
	push cx
	mov cx,4
	mov si,0
	
upLetter:	mov al,ds:[bx+3+si]
			and al,11011111b
			mov ds:[bx+3+si],al
			inc si
			loop upLetter
	pop cx
	add bx,16
	loop upRow

code ends
end start


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)(章节8.6)寻址方式的综合应用

assume cs:code,ss:stack,ds:data

data segment
	
	db 'DEC'
	db 'Ken Olsen'
	dw 137		;排名 ->38		;12
	dw 40		;收入 -> 110	;14	
	db 'POP'	;著名产品->VAX	;16
data ends

stack segment
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
stack ends

code segment
	start:	mov ax,stack
			mov ss,ax
			mov sp,32
			
			mov ax,data
			mov ds,ax
			
			mov bx,0
			mov word ptr ds:[bx+12],38
			add word ptr ds:[bx+14],70
			mov si,0
			mov byte ptr ds:[bx+16+si],'V'
			inc si
			mov byte ptr ds:[bx+16+si],'A'
			inc si
			mov byte ptr ds:[bx+16+si],'X'
			
code ends

end start

7.(章节8.7).div

assume cs:code,ss:stack,ds:data

data segment
	db 6Ah,18h,0,01h
	db 3,0,0,0
	db 0,0,0,0
	db 0,0,0,0
data ends

stack segment
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
stack ends

code segment
	start:
		mov ax,stack
		mov ss,ax
		mov sp,32
		
		mov ax,data
		mov ds,ax
		
		;除数是8位
		;1.
		;mov ax,16
		;mov bl,3
		;div bl			;AX=0105H
		
		;2.
		;mov ax,16
		;div byte ptr ds:[0] ;AX=0105H
			
		;除数是16位
		;1.
		;mov ax,ds:[0]
		;mov dx,ds:[2]
			
		;mov bx,3
		;div bx		;AX=0005H  DX=0001H(余数)
		
		;2.
		;div word ptr ds:[4]	;AX=0005H  DX=0001H(余数)
		
		;习题:计算100001(186A1H) / 100(64H)
		;mov dx,1
		;mov ax,86A1h
		
		;mov bx,100
		
		;div bx
			
		;习题:计算1001 / 100
		;mov ax,1001
		;mov bl,100
		;div bl
		
		mov ax,1001
		mov bx,256
		div bx
			
code ends

end start

在这里插入图片描述

8.用div计算data段中的第一个数据除以第二个数据,商存放在第三个数据的存储单元中

assume cs:code,ds:data,ss:stack

;用div计算data段中的第一个数据除以第二个数据,商存放在第三个数据的存储单元中
data segment
	dd 100001
	dw 100
	dw 0
data ends

stack segment
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
stack ends

code segment
start:
	mov ax,stack
	mov ss,ax
	mov sp,32
	
	mov ax,data
	mov ds,ax
	
	mov ax,ds:[0]
	mov dx,ds:[2]

	div word ptr ds:[4]
	mov ds:[6],ax
	
	mov ax,4c00h
	int 21h
	
code ends
end start

在这里插入图片描述

9.(章节8.9)dup指令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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

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

相关文章

vue3项目脚手架如何使用swiper, ‘vue-awesome-swiper‘报错解决(简单示例)

目录 前言 使用方法 效果图 1.下载swiper 2. 写入需要的页面 3.在对应页面引入组件 4.推荐页完整代码 前言 Vue3和Vue2在使用swiper时是有差别的,Vue3引入swiper需要注意Vu3的版本和swiper的版本,如果不匹配通常会报错 如下:当引用版本过…

Presto基础学习--学习笔记

1,Presto背景 2011年,FaceBook的数据仓库存储在少量大型hadoop/hdfs集群,在这之前,FaceBook的科学家和分析师一直靠hive进行数据分析,但hive使用MR作为底层计算框架,是专为批处理设计的,但是随…

Spingboot 之spring-boot-starter-parent与spring-boot-dependencies区分

在创建spring boot工程时,spring-boot-starter-parent 和 spring-boot-dependencies是二选一的关系,在pom中引入其中一个就可以了。 那么什么时候用spring-boot-starter-parent 和 spring-boot-dependencies呢?从字面名称上看,如…

从零开始,探索Spring框架的魅力与实践

Spring 1,介绍1.1 为什么要学?1.2 学什么? 2,Spring相关概念2.1 初识Spring2.1.1 Spring家族2.1.2 了解Spring发展史 2.2 Spring系统架构2.2.1 系统架构图2.2.2 spring主要内容 2.3 Spring核心概念2.3.1 目前项目中的问题2.3.2 IOC、IOC容器、Bean、DI…

美容院管理系统服务预约会员小程序效果如何

美容院在美业场景中需求度较高,尤其女性爱美悦己消费逐年增加,如清洁焕肤、祛皱抗衰、激光脱毛等美容项目都有不少需求者。 互联网深入美业行业多年,传统线下经营模式已经很难满足当今客户消费流程,如品牌寻找、服务预约、到店、…

基于PHP的在线日语学习平台

有需要请加文章底部Q哦 可远程调试 PHP在线日语学习平台 一 介绍 此日语学习平台基于原生PHP开发,数据库mysql。系统角色分为用户和管理员。(附带参考设计文档) 技术栈:phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/注销 2 个人中心 3 查看课程…

完美解决:wget命令下载时遇到“错误 308:Permanent Redirect。”

目录 1 问题 2 解决方法 1 问题 使用wget命令下载时候遇到: --2023-12-02 20:36:08-- http://mirrors.jenkins.io/war-stable/latest/jenkins.war 正在解析主机 mirrors.jenkins.io (mirrors.jenkins.io)... 20.7.178.24, 2603:1030:408:5::15a 正在连接 mirror…

引用计数 Rc 数据类型

RUST提供了一个名为Rc<T>的类型来支持多重所有权&#xff0c;Rc是Reference counting的缩写。Rc<T>类型实例会在内部维护一个用于记录值引用次数的计数器&#xff0c;从而确定这个值是否仍在使用。如果一个值的引用次数为零&#xff0c;就意味着这个值可以被安全清…

深度学习记录--初识向量化

什么是向量化&#xff1f; 之前计算logistic回归损失函数时&#xff0c;在代码实现时&#xff0c;讨论了for循环&#xff1a;过多的for循环会拖慢计算的速度(尤其当数据量很大时) 因此&#xff0c;为了加快计算&#xff0c;向量化是一种手段 运用python的numpy库&#xff0c…

java学习part26线程安全

136-多线程-同步代码块解决两种线程创建方式的线程安全问题_哔哩哔哩_bilibili 1.安全问题 关键在于某些数据操作 2.解决 2.1同步代码块 相当于给数据操作加了互斥锁 2.1.1在实现runnable接口的方式下 锁对象要求必须是唯一的&#xff0c;因为可以看成是谁占了这个对象&…

软件工程期末复习(1)

学习资料 软件工程知识点总结_嘤桃子的博客-CSDN博客 软件工程学习笔记_软件工程导论第六版张海藩pdf-CSDN博客 【软件工程】软件工程期末试卷习题课讲解&#xff01;&#xff01;_哔哩哔哩_bilibili 【拯救者】软件工程速成(期末考研复试软考)均适用. 支持4K_哔哩哔哩_bil…

树基本概念+前中后序遍历二叉树

&#x1f308;一、树的基本概念 ☀️1.树的定义&#xff1a;树是一种非线性结构&#xff0c;看起来像一棵倒挂的树&#xff0c;根朝上&#xff0c;而叶朝下。 ☀️2.相关术语 1.根节点&#xff1a;图中的A&#xff0c;无前驱结点 2.叶节点&#xff08;终端节点&#xff09;&a…

场效应管mosfet和IGBT晶体管的区别

一、概念 在结构上&#xff0c;MOSFET和IGBT看起来非常相似&#xff0c;实则不同。IGBT由发射极、集电极和栅极端子组成&#xff0c;而MOSFET由源极、漏极和栅极端子组成。IGBT的结构中有PN结&#xff0c;MOSFET没有任何PN结。 在应用中&#xff0c;IGBT和MOSFET都可以用作静…

Zookeeper 安装与部署

Zookeeper官网 目录 1 配置文件参数解读2 Zookeeper 单点安装3 Zookeeper 分布式安装 1 配置文件参数解读 Zookeeper 中的配置文件 zoo.cfg 中参数含义解读如下&#xff1a; &#xff08;1&#xff09;tickTime 2000&#xff1a;通信心跳数&#xff0c;Zookeeper 服务器与客户…

【bat】批处理脚本大全

目录 1.概述 2.变量 3.运算符 3.2.重定向运算符 3.3.多命名运算符 3.4.管道运算符 4.命令 4.1.基本命令 4.2.参数传递 4.3.查看脚本内容 4.4.注释 4.5.日期和时间 4.6.启动脚本 4.7.调用其他bat 4.8.任务管理 4.8.1.任务列表查看 4.8.2.任务终止 4.9.文件夹 …

V8引擎类型转换(VIP课程)

这一章是源于一道面试题 完成以下条件并且输出console if(a 1 && a 2 && a 3) {console.log(true) }好家伙 乍一看一个变量怎么可能等于三个值&#xff1f;带着疑问我们去深入了解 类型系统 在JavaScript中类型系统不同于别的语言&#xff0c;例如JavaSc…

API无代码开发让尘锋SCRM与营销系统集成,提高电商平台客服效率

API无代码开发的力量 随着电商平台业务的日益增长&#xff0c;客服系统的效率和响应速度成为了企业关注的焦点。API无代码开发的出现&#xff0c;为企业提供了一个高效的解决方案。API(Application Programming Interface&#xff0c;应用编程接口)允许不同的软件系统之间进行有…

Hdoop学习笔记(HDP)-Part.02 核心组件原理

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

c语言-联合体和枚举

文章目录 一、联合体1. 联合体类型的声明和创建2. 联合体的特点3. 联合体大小的计算4.总结 二、枚举1. 枚举类型的声明2. 枚举类型的优点3. 枚举类型的使用 一、联合体 &#xff08;1&#xff09; 像结构体⼀样&#xff0c;联合体也是由一个或者多个成员构成&#xff0c;这些成…

深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理&#x1f525;如果感觉博主的文章还不错的话&#xff…