1. 修改CS、IP的指令
- cs指向代码段,IP是偏移地址
- 修改IP的内容:
- jmp 寄存器:jmp ax (类似于mov IP, ax)用寄存器中的值修改IP
- 同时修改CS和IP:
- jmp 段地址:偏移地址:jmp 2AE3:3
- 修改CS和IP之后,CPU会执行指向的指令,之后默认
IP+n
,n为指令长度,也就是会自发执行下去。 - 如何让内存中的代码被执行:
- 把CS,IP指过去,CPU不会判断什么是代码段什么是数据段,只要CS和IP指的,就是代码段。
- CPU只认CS:IP指向的内存单元是代码段
2. 使用Debug调试工具
r
r ax
AX 0000
:1111
r 寄存器 回车
打印寄存器当前值
:xxxx 把寄存器的值改为xxxx
这样就能把AX寄存器的值改为1111
a, d, u
- 以汇编写入内存,注意内存地址,例如我这里写入的是0483:0100
- 用
d 0483:0100
查看对应的内存地址的内容 d 0483:0100 8
查看0483:0100
之后八个字节的内容- 机器码
- 用
u 0483:0100
翻译成汇编
t
- 修改CS和IP
-r
- t执行
e直接修改
- 使用
d 2000:0100
查看内存 - 使用
e 2000:0100
修改内存,回车之后会显示内存地址中的值,就是00
,在.
后边加上修改的数据,回车 - 用
d
再次查看,发现内存已经修改 - 注意,有一些内存受到保护,是没法修改的