0x01 调用门的基础知识
调用门执行流程
指令格式:CALL CS:EIP(EIP是废弃的)
执行步骤:
1) 根据CS的值 查GDT表,找到对应的段描述符 这个描述符是一个调用门.
2) 在调用门描述符中存储另一个代码段段的选择子.
3) 选择子指向的段 段.Base + 偏移地址 就是真正要执行的地址.
0x02门描述符
0x03 构造调用门
eq 8003f048 0040EC00`00081020
0x0...
目录:
(1) u命令(反汇编)
(2) dt命令(查看数据结构)
(3) ln命令(查找就近的符号)
(4) x命令(显示模块的符号)
(5) k命令(显示调用栈)
(6) d命令(以数据方式显示)
(7) b命令(断点)
(8) lm lmvm (显示模块信息)
(9) .reload (重加载模块)
(10) !process !thread .process .thread (查看进程线程信息)
(11) !object (查看对象信息)
(1...
本质就是修改CS段寄存器
JMP 0x20:0x004183D7 CPU如何执行这行代码?
(1) 段选择子拆分
0x20 对应二进制形式 0000 0000 0010 0000
RPL = 00
TI = 0
Index = 4
(2) 查表得到段描述符
TI = 0 所以查GDT表
Index = 4 找到对应的段描述符
四种情况可以跳转:代码段、调用门、TSS任务段、任务门
(3) 权限检查
如果是非一致代码段,要求:CPL == DPL 并且 RPL <= DPL
如果是一致代码段,要求:CP...
数据段的权限检查
参考如下代码:
比如当前程序处于0环,也就是说CPL=0
Mov ax,000B //1011 RPL = 3
Mov ds,ax //ax指向的段描述符的DPL = 0
数据段的权限检查:
CPL <= DPL 并且 RPL <= DPL (数值上的比较)
注意:
代码段和系统段描述符中的检查方式并不一样,具体参加后面课程.
总结:
CPL CPU当前的权限级别
DPL 如果你想访问我,你应该...
0x001 读取GDT表 (删除部分 00000000 )
0: kd> dq 8003f000 l 3ff
8003f000 00000000`00000000 00cf9b00`0000ffff
8003f010 00cf9300`0000ffff 00cffb00`0000ffff
8003f020 00cff300`0000ffff 80008b04`200020ab
8003f030 ffc093df`f0000001 0040f300`00000fff
8003f040 0000f200`040...
根据段描述符进行的拆分
S位
S = 1 代码段或者数据段描述符
S = 0 系统段描述符
S=1的TYPE域作用
A 访问位,表示该位最后一次被操作系统清零后,该段是否被访问过.每当处理器将该段选择符置入某个段寄存器时,就将该位置1.
W 是否可写
E 扩展方向
A 访问位
R 可读位
C 一致位
C = 1 一致代码段
C = 0 非一致代码段
S=0 的时候 系统段的分类
直接...
0x001 搭建过程
vmware上安装干净版本的xp3, [记住一定要干净版本的, 我昨天用了我以前的一个xp !process命令一直不能使用]
把VirtualKD 的target目录 复制到 虚拟机中
运行
直接确定即可
本机打开:
配置调试器(找到windbg的位置,点击确定即可):
0x002 配置 符号表
重启虚拟机,运行, 会自动打开windbg
运行 g 命令
接着下载符号: S...
每个程序都有自己的LDT,但是同一台计算机上的所有程序共享一个GDT。LDT描述局部于每个程序的段,包括其代码、数据、堆栈等。GDT描述系统段,包括操作系统本身。
①全局描述符表GDT(Global Descriptor Table)在整个系统中,全局描述符表GDT只有一张(一个处理器对应一个GDT),GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口,也就是基地址放在哪里,Intel的设计者门提供了一个寄存器GDTR用来存放GDT的入口地址,程序员将GDT设定在内存中某个位置之后,可以通过LGDT指令将GDT的入口地址装入此积存器,从此以后,CPU就根据此寄存器中的内容作为G...
先记住几个结构
1、段寄存器的结构(96位)
Selector : 显示 16位 选择子
Attribute: 隐藏 属性16位
Base: 32位
Limit: 32位
2 段描述符 (GDT表)
r gdtr
r gdtl
一共64位,记住每个结构
3 段选择子
16位
购买请联系QQ: 770612230 项目的目录,收集的 中级班(上)注:必须掌握基础课程全部内容才可以入学,可申请免费重修一次!1、开班时间:拍下付款后请及时联系客服QQ2、课程内容:保护模式、系统调用、进程与线程、驱动开发、句柄表、APC机制3、课程时间:3个月4、讲师:海东老师5、费用:698元高级会员费+4499元线上辅导班费用(线上教学,不可退款)6、上课时间:周一至周五21:00-22:307、上课方式:好视通网络教室(支持PC端,安卓手机端,苹果手机端,平板和智能电视)8、教学形式:上课前先看在线视频,提前做练习。上课,老师讲解知识点,答疑解惑。学生轮流课堂做实验。9...
0x01 背景
项目开发:微信小程序
环境部署: 需要将app的后台代码移植到腾讯云的服务上,数据库还是在阿里云那边。 config.php 文件的'DB_HOST' 修改属性
0x02 允许mysql远程连接
1、改表法
可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"
mysql -u root -p
mysql&g...
十几天没怎么摸电脑了, 回家过了个年,两个电脑虽然扛回去了, 但是一直没怎么用, 过年回家事情挺多的,
刚刚到出租屋, 工作的事情解决掉以后, 就想起了自己的博客, 这几天还不用上班, 准备把 第二期的教程, 完整的看完, 后天还要去练车,
以前在百度博客写自己的心情, 下笔很快, 也很有调理, 后来就不怎么写了, 嫌麻烦吧..
今年的事情很多
1\ 换工作
2\ 驾照
3\ 结婚
4\ 房子装修
5\ 泰国旅游
6\ 买车
........
理解定长
理解可变长
MOdR/M
SIB
全文下载
直接分享给大家,DT的课件
硬编码.xls
Intel白皮书.zip
经典定长指令上(修改寄存器)
1、PUSH/POP 特点:
0x50 PUSH EAX 1、记住32位、16、8位的通用寄存器,按照顺序记住.
0x51 PUSH ECX
0x52 PUSH EDX 2、将操作数编码到指令当中
0x53 PUSH EBX
0x54 PUSH ESP
0x55 PUSH EBP
0x56 PUSH ESI
0x57 PUSH EDI
0x58 POP EAX
0x59 POP ECX
0x5A POP EDX
0x5B POP EBX
0x5C POP...