搭建windows内核调试、malloc执行流程、线程数据结构、进程数据结构
首先安装VMware虚拟机在VMware中安装windowsXP系统安装玩之后然后打开c盘然后通过工具中的文件选项中查看页签里的高级设置吧后缀与隐藏的文件都显示出来,然后打开boot.ini文件,然后把下面的文字复制到boot.ini中把原来的内容覆盖掉。[boot loader]timeout=30default=multi(0)disk(0)rdisk(0)partition(1)\WINDO
首先安装VMware虚拟机
在VMware中安装windowsXP系统安装玩之后然后打开c盘然后通过工具中的文件选项中查看页签里的高级设置吧后缀与隐藏的文件都显示出来,然后打开boot.ini文件,然后把下面的文字复制到boot.ini中把原来的内容覆盖掉。
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="MicrosoftWindows XP Professional" /noexecute=optin /fastdetect /debug/debugport =com1/baudrate=115200
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
然后重启
然后会出现上图的样子然后选择启用调试程序
然后操作系统的环境就搞好了,然后是VMware的环境,首先打开编辑虚拟机设置
管道名字:\.\pipe\com_1
然后把打印机给删了,打印机会占用串行端口。然后VMware的环境搞好了。
然后下载wdk,在wdk中有windbg工具,百度搜索wdk8.1随便找一个下载,安装完之后找到windbg文件打开它的属性面板在目标的值的后面输入-b -k com:pipe,port=\.\pipe\com_1,resets=0
然后打开windbg
然后就是这样
点击
会让虚拟机里的系统不会被断点卡住或者0:kd中输入g回车
windbg需要下载符号文件,百度上有,百度搜索windbg符号文件下载
windbg有许多命令,可以百度windbg常用命令
然后操作系统malloc内存分配的代码
分配内存涉及到一个用户态切换内核态(提权),切换的状态涉及到的四部分第一部分是c语言的封装第二部分kernel32.dll里面的api第三部分ntdll.dll里面的api第四部分进入内核态
可以下载ida反编译dll文件
然后它的一个执行链路
malloc/new->HeapAlloc->VirtualAlloc(kernel32,R3)->NtAllocateVirtualMemory(ntdll,R3)->NtAllocateVirtualMemory(ntkrnlpa,R0)
在这call调用了一个函数VirtualAllocEx
然后VirtualAllocEx中又调用了NtAllocateVirtualMemory
这个NtAllocateVirtualMemory是nt开头nt开头就去ntdll.dll中看
这里的call调用的是一个函数指针这个要去查SSDT表看看它是以什么方式进入的内核
进入内核的方式(SSDT)
1、快速调用(sysenter、sysexit)
2、调用门、中断门、任务门、陷阱门
OS是通过快速调用实现态的切换。
查看分配内存指令的结构·
进入内核查找分配内存的函数通过ssdt表
dd KeServicedescriptorTable查看系统服务表,通过系统服务表去查询进入内核态的函数
进程数据结构
线程数据结构
更多推荐
所有评论(0)