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