ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

汇编学习记录

2026/9/9 11:59:40 拓冰建站 浏览量
汇编学习记录

前言

这篇文章是自己在专升本录取~本科开学前学习记录,破解软件的学习在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:codecode segment
;用编程进行加法计算123*236(十进制)结果存放在AX中
;eg: 10*3 = 10 + 10 + 10mov ax,123	;设置为123合适 cs即循环次数;循环次数少时间复杂度低mov cx,axmov ax,0addNumber:	add ax,236loop addNumbermov ax,4c00hint 21hcode ends
end

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

(1) 代码

assume cs:codecode 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,axinc bxloop addNumbermov ax,4c00hint 21hcode ends
end

0588h

(2)debug关键步骤

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

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

(1)代码

assume cs:codecode segment
;	将内存FFFF:0 ~ FFFF:F 内存单元中的数据复制到 
;	0:200 ~ 0:20F 中;	分析:目标地址可看做段地址20h,偏移地址0~fmov bx,0	;偏移地址mov dx,0	mov cx,16 	;循环16次addNumber:mov ax,0ffffh	mov ds,ax	;数据来源mov dx,ds:[bx]	;取数据mov ax,20hmov ds,axmov ds:[bx],dxinc bxloop addNumbermov ax,4c00hint 21hcode ends
end

在这里插入图片描述

(2)改进

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

assume cs:codecode segment
;	将内存FFFF:0 ~ FFFF:F 内存单元中的数据复制到 
;	0:200 ~ 0:20F 中;	分析:目标地址可看做段地址20h,偏移地址0~f;	es寄存器和数据相关
;	习惯:
;	ds代表数据来源,es代表数据去向mov ax,0ffffh	mov ds,ax	;数据来源mov ax,20hmov es,axmov bx,0	;偏移地址mov cx,16 	;循环16次addNumber:mov dl,ds:[bx]	mov es:[bx],dlinc bxloop addNumbermov ax,4c00hint 21hcode ends
end

在这里插入图片描述

(3)改进

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

assume cs:codecode segment
;	将内存FFFF:0 ~ FFFF:F 内存单元中的数据复制到 
;	0:200 ~ 0:20F 中;	分析:目标地址可看做段地址20h,偏移地址0~f;	es寄存器和数据相关
;	习惯:
;	ds代表数据来源,es代表数据去向mov ax,0ffffh	mov ds,ax	;数据来源mov ax,20hmov es,axmov bx,0	;偏移地址mov cx,8 	;循环8次addNumber:mov dx,ds:[bx]	mov es:[bx],dx;push ds:[bx];pop es:[bx]add bx,2loop addNumbermov ax,4c00hint 21hcode ends
end

在这里插入图片描述

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

assume cs:codecode segment
;向内存0:200 ~ 0:23F 依次传送数据 0~63(3FH)
;只能使用9条指令 20:00 3f mov ax,20hmov ds,axmov bl,0hmov cx,64Number:	mov ds:[bx],blinc blloop Numbermov ax,4c00hint 21hcode ends
end

在这里插入图片描述

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

assume cs:codecode segment;编程计算下面8个数据的和,结果放在ax寄存器中
1,2,3,4,5,6,7,8dw 1,2,3,4,5,6,7,8start:	mov bx,0mov ax,0mov cx,8addNumber:add ax,cs:[bx]add bx,2loop addNumbermov ax,4c00hint 21hcode endsend start

在这里插入图片描述

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

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

assume cs:codesg,ds:datasgdatasg segmentdb 'file            'db 'edit            'db 'sear            'db 'view            'db 'view            'dw 0	;50h
datasg endscodesg segment
start:mov ax,datasgmov ds,axmov cx,5mov bx,0upRow:	mov ds:[50h],cxmov si,0mov cx,4upletter:mov al,[bx+si]and al,11011111bmov [bx+si],alinc siloop uplettermov cx,ds:[50h]add bx,16loop upRowmov ax,4c00hint 21hcodesg endsend start

以栈的方式

assume cs:codesg,ds:datasgdatasg segmentdb 'file            'db 'edit            'db 'sear            'db 'view            'db 'view            'datasg endsstack segmentdw 0,0,0,0dw 0,0,0,0dw 0,0,0,0dw 0,0,0,0
stack endscodesg segment
start:mov ax,stackmov ss,axmov sp,32mov ax,datasgmov ds,axmov cx,5mov bx,0upRow:	push cx	;保存到栈中mov ds:[50h],cxmov si,0mov cx,4upletter:mov al,[bx+si]and al,11011111bmov [bx+si],alinc siloop upletterpop cxadd bx,16loop upRowmov ax,4c00hint 21hcodesg endsend start

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

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

assume cs:code,ss:stack,ds:datastack segmentdw 0,0,0,0dw 0,0,0,0dw 0,0,0,0dw 0,0,0,0
stack endsdata segmentdb '1. display      'db '2. brows        'db '3. replace      'db '4. modify       '
data endscode segmentstart:mov ax,stackmov ss,axmov sp,32mov ax,datamov ds,axmov bx,0mov cx,4upRow:push cxmov cx,4mov si,0upLetter:	mov al,ds:[bx+3+si]and al,11011111bmov ds:[bx+3+si],alinc siloop upLetterpop cxadd bx,16loop upRowcode ends
end start

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

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

assume cs:code,ss:stack,ds:datadata segmentdb 'DEC'db 'Ken Olsen'dw 137		;排名 ->38		;12dw 40		;收入 -> 110	;14	db 'POP'	;著名产品->VAX	;16
data endsstack segmentdw 0,0,0,0dw 0,0,0,0dw 0,0,0,0dw 0,0,0,0
stack endscode segmentstart:	mov ax,stackmov ss,axmov sp,32mov ax,datamov ds,axmov bx,0mov word ptr ds:[bx+12],38add word ptr ds:[bx+14],70mov si,0mov byte ptr ds:[bx+16+si],'V'inc simov byte ptr ds:[bx+16+si],'A'inc simov byte ptr ds:[bx+16+si],'X'code endsend start

7.(章节8.7).div

assume cs:code,ss:stack,ds:datadata segmentdb 6Ah,18h,0,01hdb 3,0,0,0db 0,0,0,0db 0,0,0,0
data endsstack segmentdw 0,0,0,0dw 0,0,0,0dw 0,0,0,0dw 0,0,0,0
stack endscode segmentstart:mov ax,stackmov ss,axmov sp,32mov ax,datamov 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 blmov ax,1001mov bx,256div bxcode endsend start

在这里插入图片描述

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

assume cs:code,ds:data,ss:stack;用div计算data段中的第一个数据除以第二个数据,商存放在第三个数据的存储单元中
data segmentdd 100001dw 100dw 0
data endsstack segmentdw 0,0,0,0dw 0,0,0,0dw 0,0,0,0dw 0,0,0,0
stack endscode segment
start:mov ax,stackmov ss,axmov sp,32mov ax,datamov ds,axmov ax,ds:[0]mov dx,ds:[2]div word ptr ds:[4]mov ds:[6],axmov ax,4c00hint 21hcode ends
end start

在这里插入图片描述

9.(章节8.9)dup指令

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

总结

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

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