实验4
Posted kerman
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验4相关的知识,希望对你有一定的参考价值。
1. 综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个
字单元重复填充字数据 0403H。
这题就是简单的循环操作,将固定的数据填入,不过这里需要注意的是题目中为16字而不是字节,需要分高位和低位分开写入,因为ds:[bx]是以字节为单位的。
汇编代码:
assume cs:code code segment mov ax, 0b800h mov ds, ax mov ax, 0403h mov bx, 07b8h mov cx, 16 s: mov ds:[bx], al inc bx mov ds:[bx], ah inc bx loop s mov ax, 4c00h int 21h code ends end
将其中的0403h改为0441h后结果如下:
2. 综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据
0~63(3FH)。
(1)必做:综合使用 loop, [bx], mov 实现
这题和第一题十分的相似,区别在于原来是在一连续区域写入同一数据,现在变为每一次写入不同的数据。这里我直接用bx同时作为地址和数据的变量,也可以分开写,再引入一个变量。
代码如下:
assume cs:code code segment mov ax, 20h mov ds, ax mov bx, 0 mov cx, 64 s: mov [bx], bx inc bx loop s mov ax, 4c00h int 21h code ends end
(2)选做*:利用栈的特性,综合使用 loop,push 实现(限定仅使用 8086 中已学过
指令实现)
这题很简单,就是push后直接pop,因为栈是FILO。
代码如下:
assume cs:code code segment mov ax, 20h mov ds, ax mov bx, 0 mov cx, 64 s: push bx pop ds:[bx] inc bx loop s mov ax, 4c00h int 21h code ends end
用g命令一次执行完成后,用d命令进行查看,可以发现0:200开始的值改变成我们写入的0~63了。
3. 教材实验 4(3)(P121)
这题一开始我一直错误,最后一句没有复制成功,后来发现原来是我循环的次数搞错了,将次数数成了要复制的最后一句的上一句,因此每次都会少一句,这里cx设为几就循环几次,另外代码的开始地址可以通过
cs或者code给出,而这里代码的长度我是通过先填一个数,然后调试看它的长度,不过这里要看清楚,不要像我一样数错了。
代码如下:
assume cs:code code segment mov ax, code mov ds, ax mov ax, 0020h mov es, ax mov bx, 0 mov cx, 18h s: mov al, [bx] mov es:[bx], al inc bx loop s mov ax, 4c00h int 21h code ends end
本次实验相对来说其实还是很简单的,只要概念清晰,一些操作命令熟悉,不会有太大的问题。
以上是关于实验4的主要内容,如果未能解决你的问题,请参考以下文章
[NTUSTISC pwn LAB 7]Return to libc实验(puts泄露libc中gadget片段定位)