汇编学习记录

前言

这篇文章是自己在专升本录取~本科开学前学习记录,破解软件的学习在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提供了大量能使我们快速便捷地处理数据的函数和方法。

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

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

相关文章

003、应用程序框架-UIAbility

之——UIAbility 目录 之——UIAbility 杂谈 正文 1.UIAbility 2.基本使用 2.1 创建Ability工程 2.2 添加基础功能 2.3 新建页面 2.4 页面间的跳转 3.生命周期 总结 杂谈 UIAbility,其中的页面创建、页面间的跳转、数据传递、生命周期。 正文 1.UIAbil…

【Android】MMKV实现本地持久化

引入 (测试操作机器是华为Mate 20 Pro 128G,Android 10,每组重复1k次,时间单位是ms) 可以看出MMKV的耗时比其他耗时少的离谱。再看多进程下的性能: 不必多说。再看和DataStore的对比: 简介 根据MMKV官方文档所言 MM…

波奇学C++:智能指针(二):auto_ptr, unique_ptr, shared_ptr,weak_ptr

C98到C11:智能指针分为auto_ptr, unique_ptr, shared_ptr,weak_ptr,这几种智能都是为了解决指针拷贝构造和赋值的问题 auto_ptr:允许拷贝,但只保留一个指向空间的指针。 管理权转移,把拷贝对象的资源管理权转移给拷贝…

深度学习记录--计算图(前向后向传播)

什么是计算图? 从一个例子入手: 将函数J的计算用流程图表示出来,这样的流程图被称为计算图 简单来说,计算图是用来显示每个变量间的关系的一种图 两种传播方式 计算图有两种传播方式:前向传播 和 后向传播 什么是前…

手写VUE后台管理系统7 - 整合Less样式

整合LESS 安装使用 Less(Leaner Style Sheets),是一门向后兼容的 CSS 扩展语言。 Less 官网:https://less.bootcss.com/ 安装 yarn add less安装完成就可以直接使用了 使用 以文件形式定义全局样式 在 assets 目录下创建 less …

精准长尾关键词批量挖掘工具,长尾关键词挖掘正确使用方法

互联网时代,SEO已然成为网站推广的关键一环。而在SEO的世界里,长尾关键词无疑是一块被广泛忽视却蕴含着巨大潜力的宝地。 什么是长尾关键词 长尾关键词,指的是那些相对不那么热门、搜索量较低但更为具体、更贴近用户真实需求的关键词。与短…

JAVAEE 初阶 多线程基础(五)

可重入锁 死锁 内存可见性问题 一 可重入锁二.死锁场景1. 一个线程一把锁场景2. 两个线程两把锁场景3. n个线程m把锁(哲学家就餐问题) 三.Java库中的标准类四.内存可见性问题 一 可重入锁 谈到可重入锁,需要再次回顾线程安全问题原因 1.根本原因:线程的抢占式执行,随机调度 2.多…

【Erlang进阶学习】2、匿名函数

受到其它一些函数式编程开发语言的影响,在Erlang语言中,将函数作为一个对象,赋予其“变量”的属性,即为我们的匿名函数 或 简称 fun,它具有以下特性: (匿名函数:不是定义在Erlang模…

基于单片机的多功能视力保护器(论文+源码)

1.系统设计 多功能视力保护器在设计过程中能够对用户阅读过程中的各项数据信息进行控制,整体设计分为亮种模式,分别是自动模式,手动模式。在自动模式的控制下,当单片机检测当前光照不强且有人时就开启LED灯,并且会根据…

uView ui 1x uniapp 表格table行内容长度不一导致高度不统一而出现的不对齐问题

问题 因为td单元格内空长度不定导致行单元格未对齐 解决&#xff1a; 重置td的高度&#xff1a;height:100% 改为height:auto !import <u-table><u-tr v-for"(item,index) in Lineinfo.Cust_Name" ><u-td style"height: auto !important;back…

C++ day49 买卖股票的最佳时机

题目1&#xff1a;121 买卖股票的最佳时机 题目链接&#xff1a;买卖股票的最佳时机 对题目的理解 prices[i]表示一支股票在第i天的价格&#xff0c;只能在某一天买入这支股票&#xff0c;并在之后的某一天卖出该股票&#xff0c;从而获得最大利润&#xff0c;返回该最大值&…

Git中如何按日期进行checkout

Git的checkout命令 在Git中&#xff0c;checkout命令是常用的操作之一。它允许我们切换到不同的分支或指定的提交。通过checkout命令&#xff0c;我们可以在代码库中切换到特定的提交版本&#xff0c;这也意味着我们可以按日期进行checkout。 按日期进行checkout的方法 要按…

Mysql之数据处理增删改

Mysql之数据处理增删改查 插入数据INSERT INTO语句的使用INSERT 与子查询结合 更新数据(修改数据)UPDATE SET语句 删除数据DELETE FROM语句 Mysql8新特性&#xff1a;计算列 插入数据 INSERT INTO语句的使用 用 INSERT INTO 语句&#xff0c;向表中插入数据 方式一&#xff1a;…

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

Spring 1&#xff0c;介绍1.1 为什么要学?1.2 学什么? 2&#xff0c;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…

OpenGL ES入门教程(三)之为平面桌子添加混合色

OpenGL ES入门教程&#xff08;三&#xff09;之为平面桌子添加渐变色 前言零、OpenGL ES实现混合色的原理一、修改绘制的桌子结构1. 三角形扇介绍2. 基于三角形扇结构绘制平面桌子 二、为每个顶点添加颜色属性三、修改着色器1. 顶点着色器2. 片段这色器 四、绘制具有混合颜色的…

微前端实战:打造高效、灵活的前端应用架构

文章目录 一、微前端简介二、微前端的优势1. 高度模块化2. 独立部署3. 易于扩展4. 技术栈无关5. 独立升级 三、微前端的原理四、微前端案例思路《微前端实战》编辑推荐内容简介作者简介目录前言/序言 随着互联网行业的快速发展&#xff0c;前端应用的规模和复杂度也在不断增加。…

k8s部署es和skywalking

使用k8s部署es和skywalking skywalking介绍 skywalking架构 整个架构&#xff0c;分成上、下、左、右四部分&#xff1a; 上部分 Agent &#xff1a;负责从应用中&#xff0c;收集链路信息&#xff0c;发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等…

美甲美睫店预约会员管理小程序作用如何

美甲美睫是美业中较为重要的类目&#xff0c;主要以小摊、门店/连锁形式&#xff0c;随着线上化程度加深&#xff0c;传统线下美业店面临着困境&#xff0c;想要进一步增长及解决痛点&#xff0c;就需要线上数字化运营得到更多生意。 那么通过【雨科】平台搭建美甲美睫店小程序…

CyclicBarrier实战应用——批量数据多线程协调异步处理(主线程执行事务回滚)

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; CCyclicBarrier实战应用——批量数据多线程协调异步处理(主线程执行事务…

多级缓存自用

1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图: 存在下面的问题: •请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈 •Redis缓存失效时,会对数据库产生冲击 多级缓存就是充分利用请求处理的每个环节,添加缓…