zoukankan      html  css  js  c++  java
  • MacOS/Liunx主机搭建windows平台双机调试环境

    0x00 前言

    本文的主要试用对象是Mac OS/Linux用户,对于想调试windows内核相关的一些东西时,需要搭建双机调试环境的一些记录(即用一个windows虚拟机调试另外一个windows虚拟机)。另外对于本机是windows的用户也完全试用,windows搭建双机环境是会更简单一些,但是基本是一样的。

    0x01 测试环境

    • VMware 15
    • windows 7 x86 –> 调试机
    • windows xp –> 被调试机1
    • windws 7 x86 –> 被调试机2
    • Ubuntu 18.04 –> 物理机
    • windbg –> 调试器

    0x02 环境搭建

    环境搭建的核心主要在虚拟机的设置上,这块设置好了,后面就会比较顺利。顺便这里建议调试机选winsows7或者windows xp这样占用资源比较少的虚拟机来运行windbg,这样可以大大节约主机的压力。

    1.虚拟机的配置

    虚拟机的安装在这里就不在叙述,安装好虚拟机以后,我们打开virtual machine settings–>Add–>serial port–>finish,如下图所示

    随后我们选择Use socket(named pipe)选项,这里需要输入一个文件的位置来做socket连接的转储,相当于调试信息转存的中转站,这里只需要指定就可以,稍后会自动在所设置目录自动创建文件,我这里是com1文件,这里需要特别说明一下,在设置虚拟机的串行端口指定com1还是com2这取决于serial port的端口号是几,默认情况下虚拟机添加了打印机 print,所以此处默认端口为2,我在测试时使用com2没成功,删除了虚拟机的打印机后,使用的com1端口可以成功。这台虚拟机是xp,是作为被调试机用的,所以我们选择server,接着勾选I/O Mode,使此虚拟机支持cpu中断,如下图所示

    接着设置调试机,基本和上面的设置一样,区别是,这次是选择client,不勾选I/O Mode选项,如下图所示

    Ok,到这里虚拟机的设置就完成了,接下来是被调试机的设置,我们打开被调试机

    2.被调试机的设置

    这里先拿xp来说一下,windows7及以上的系统设置和xp略有不同,稍后会叙述.打开被调试机,win+R键入c:oot.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="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
    multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft Windows XP Professional debug" /debug /debugport=com1 /baudrate=115200 /fastdetect
    

    这里的debugport需要和刚才设置的文件的名字一样,这里也是指定我们选中的串行接口。baudrate默认为115200,然后ctrl+s保存,再次重启就会多出一个支持调试的启动选项.如图

    Windows Vista之后的系统,不在使用BOOT.INI文件,改为了使用Coot Configuration Data,其配置的原理也大同小异,下面以windows 7为例子,做一个示范

    C:Windowssystem32>bcdedit.exe /copy {current} /d "windows 7 Debug with Serial"      #复制当前的启动入口
    
    已将该项成功复制到 {2bd58bb9-12d9-11eb-b328-b016eb5db92e}。
    
    C:Windowssystem32>bcdedit.exe /debug {2bd58bb9-12d9-11eb-b328-b016eb5db92e} on      #启动入口启动内核调试
    
    操作成功完成。
    
    C:Windowssystem32>bcdedit /dbgsettings serial DEBUGPORT:1 BAUDRATE:115200      #serial表示使用串口,对应上面xp的com1
    操作成功完成。
    
    C:Windowssystem32>bcdedit /dbgsettings      #检查上述的设置
    debugtype               Serial
    debugport               1
    baudrate                115200
    操作成功完成。
    
    C:Windowssystem32>bcdedit      #查看Windoes的启动入口
    
    Windows 启动管理器
    --------------------
    标识符                  {bootmgr}
    device                  partition=C:
    description             Windows Boot Manager
    locale                  zh-CN
    inherit                 {globalsettings}
    default                 {current}
    resumeobject            {2bd58bb5-12d9-11eb-b328-b016eb5db92e}
    displayorder            {current}
                            {2bd58bb9-12d9-11eb-b328-b016eb5db92e}
    toolsdisplayorder       {memdiag}
    timeout                 30
    
    Windows 启动加载器
    -------------------
    标识符                  {current}
    device                  partition=C:
    path                    Windowssystem32winload.exe
    description             Windows 7
    locale                  zh-CN
    inherit                 {bootloadersettings}
    recoverysequence        {2bd58bb7-12d9-11eb-b328-b016eb5db92e}
    recoveryenabled         Yes
    osdevice                partition=C:
    systemroot              Windows
    resumeobject            {2bd58bb5-12d9-11eb-b328-b016eb5db92e}
    nx                      OptIn
    
    Windows 启动加载器
    -------------------
    标识符                  {2bd58bb9-12d9-11eb-b328-b016eb5db92e}
    device                  partition=C:
    path                    Windowssystem32winload.exe
    description             windows 7 Debug with Serial
    locale                  zh-CN
    inherit                 {bootloadersettings}
    recoverysequence        {2bd58bb7-12d9-11eb-b328-b016eb5db92e}
    recoveryenabled         Yes
    osdevice                partition=C:
    systemroot              Windows
    resumeobject            {2bd58bb5-12d9-11eb-b328-b016eb5db92e}
    nx                      OptIn
    debug                   Yes
    

    设置以后的开机结果如下

    0x03 调试机的设置

    打开调试机,安装好windbg。随后我们复制一个新的桌面快捷方式,改名字(为了区分原来的快捷方式),然后右键-->属性-->目标在后面添加-b -k com:port=1,baud=115200图片如下

    这时我们需要重启被调试机,进入支持debug的启动选项,这时我们观察windbg已经连接到了目标主机,如下图

    0x04 设置内核调试用的符号表

    在内核调试下,按g可让目标主机继续运行,如果想让目标中断可选择调试器的debug–>Break选项,即可把控制权交还调试器,随后我们加载内核调试需要的符号表,首先需要调试机联网,随后在调试器键入ctrl+s打开符号表路径设置,输入如下SRV*c:symbols* https://msdl.microsoft.com/download/symbols这里的意思是告诉调试器,首先去c盘的symbols目录找符号表,如果找不到就联网到微软的符号表服务器远程下载,下载的文件同样会存到symbols目录方便下次使用.所以需要手动到c盘新建一个名字为symbols的空文件夹.随后在调试器的命令行输入.reload /f重新加载符号表,一般来说第一次都会联网下载符号表的,下载过程中由于某些文件变化符号表已经不维护,所以会出现部分找不到的情况,但基本影响不大,如果出现完全不能下载的情况,请参考之前的文章解决。下载好以后就可以双机调试了

  • 相关阅读:
    javaScript面向对象继承方法经典实现
    javascript面向对象之Javascript 继承
    js面向对象 多种创建对象方法小结
    JavaScript 三种创建对象的方法
    正常上线的流程
    java.lang.NoClassDefFoundError: javax/servlet/ServletInputStream
    org/eclipse/jetty/util/component/Container$Listener
    java.io.IOException: Cannot find any registered HttpDestinationFactory from the Bus.
    java.lang.NoClassDefFoundError: javax/wsdl/extensions/ElementExtensible
    java.lang.ClassNotFoundException: org.objectweb.asm.ClassWriter
  • 原文地址:https://www.cnblogs.com/Taolaw/p/13837755.html
Copyright © 2011-2022 走看看