汇编学习记录

前言

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



一、破解

时间: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提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值