本文已参与「新人创作礼」活动,一起开启掘金创作之路。 01通用寄存器
寄存器是 CPU 内部用来存放数据的一些小型存储区域
通用寄存器一般不会改变
8086CPU所有的寄存器都是16位的,可以存放两个字节。
以前的八位CPU 高位全填0 用低八位
02字在寄存器中的存储
word=2B(Bytes)
bin(Binary)目录存放软件源代码的二进制形式
03几条汇编指令
8226H+8226H=1044CH
寄存器存放16位 1被抛弃 所以执行后AX中的数据为044CH
虽然 al+93H=0158H,但由于AX16位寄存器被CPU认为拆为两个8位寄存器AL、AH
所以0158H中1被抛弃,最终AX数据0058H
检测点2.1
F4A3H
31A3H
3123H
6264H
826CH
6264H
826CH
04D8H
0482H
6C82H
D882H
D888H
D810H
6246H
mov ax,2
add ax,ax
add ax,ax
add ax,ax
04物理地址
8086CPU采取一种在内部用两个16位地址合成的方法来形成一个20位的物理地址
地址加法器将两个16位地址合并成一个20位的地址
地址加法器工作原理
2.8段的概念
检测点2.2
10H~1000FH
(20000H-ffffh)/16
最小1001H 最大2000H
2.9段寄存器
它们指示了CPU当前要读取指令的地址
(思维扩展)改变CS IP的值指向自己编写的木马或病毒
或将木马地址放在杀毒软件之前
CS IP的值通过转移指令JMP
同时修改CS IP
段地址修改CS 偏移地址修改IP
单独修改IP内容
mov ax,200H(你想要修改的偏移地址)
jmp某一合法寄存器
jmp ax(类似于 mov IP,ax)
jmp bx
分析CPU运行的流程
恶意程序 死机原因的其中之一
此时CPU一直无法跳出,会造成系统死机 CPU占用率一直为100%
CPU只认被CS:IP指向的内存单元中的内容为指令
所以要想正常运行程序,必须将CS:IP指向所定义的代码段中的第一条指令的首地址。
破解小思路
跳过程序校验的代码段,直接运行程序(暴力破解)
CS存放指令的段地址,IP存放指令的偏移地址