nj001 发表于 2020-7-8 19:42

对windows和linux内核调试套件gdk7和intel dci 硬件调试技术的一个简单评测

本帖最后由 nj001 于 2020-7-9 15:53 编辑

一.关于dci技术的一点介绍
   The Intel Direct Connect Interface (DCl) allows debugging of Intel targets using the USB3 port. The technology supports debugging via the USB Stack (DCI DbC)as well as a dedicated protocol using a USB3 connector only (DCI OOB)
   简单来说就是可以使用usb3接口访问调试目标机CPU的jtag组件,所以CPU调试技术仍然靠jtag支持,只不过在这之上新加入了一种连接方式,就是dci连接方式


二.与平时使用的调试工具的主要区别
   平时做windows内核调试时大多是使用windbg,windbg确实是很强大的调试工具,但是它也有做的不完美的地方,比如不允许调试某些函数,需要内核调试引擎的支持,,,,,还有不同版本之间的bug,,,,而使用dci技术进行调试就没有这些问题,因为它不需要目标机做任何软件层的支持,凡是运行在cpu上的代码均可调试,所以你可以那他来调试bios,内核调试引擎,nt内核,vt程序,smm等等等等,而且它还有一个的好处就是基本没有反调试的方法,因为它在目标价上不依赖软件,不占用内存,对cpu和内存来说是透明的


三.dci的分类
   jtag有几种连接方式,如下图

(来自intel system studio)
左边是cpu型号,右边是支持的连接方式,可以看到10代cpu支持dci oob方式,dci usb方式和xdp方式
   为了能方便简单的使用dci技术,一般使用usb方式,oob方式似乎需要和intel签署协议而且价格也不便宜,需要300刀
    usb方式就简单了,直接在调试目标机和主机上插上一根usb3公对公接口的线就行了,虽然intel官网上标明需要专用调试电缆但是根据我在网上查到的资料,使用windbg的调试线(网上可以查到改造方法,某宝也有卖)或者普通的usb3公对公线都是可以的


四,启用dci
    使用dci技术的一大阻碍就是开启dci需要设置cpu莫些寄存器的莫些位,就像在bios里开启vt选项一样,dci的设置同样在bios里,但是现在大多数电脑的bios里没有这个选项,而且是默认设置为关闭的,所以需要修改bios的默认设置来开启dci,不过好消息是大多数电脑的bios里与dci相关的东西很容易借助工具修改,可以参考以下文章


https://casualhacking.io/blog/2019/6/2/debug-uefi-code-by-single-stepping-your-coffee-lake-s-hardware-cpu

https://gist.github.com/eiselekd/d235b52a1615c79d3c6b3912731ab9b2
(我曾想自己组一个调试机器,于是买了一个nuc,小巧便携,只不过这东西最大的问题是它的bios种类跟其他bios不一样,修改起来很麻烦,于是我放弃了.....还有,修改bios有风险,最好事前用编程器备份一下)
   假如你已经设置好了dci,并且有一根usb3的线,那你可以试试使用dci进行调试了,无论你用windows还是linux,只要是跑在cpu上的代码都可以进行调试,假如它有一个特权级的话,我觉得应该标注成r-3,


五,对于gdk7的一些感受
    我自己对dci这个技术是很看好的,因为它对目标机的影响最小,有很强的调试能力,但是我之前尝试搞一个确失败了,.....花了好几天时间没搞成,挺郁闷的,后来看到了gdk7相关的东西考虑了之后就决定买了,还是图个方便,不想再自己折腾了,而且使用之后觉得还不错,gdk7的硬件说实话配置不高调试个程序,内核之类的够用,跑游戏估计够呛,我主要看中它提供的软件nanocode,这个软件复用了windbg的调试引擎,用它来调试windows基本不用再学习什么新的东西,上手就能用,不过它毕竟不是windbg我在使用的时候发现还是有不同于windbg的地方,还有一些小bug,不过这都可以理解,毕竟是新产品,有些bug很正常,后面的版本也都会及时修复,下面放几张图

这是选择调试方式的界面,我一般用dci open

这是程序调试界面,我没用dci这只是调试一个普通程序,dci调试内核跟这个差不多
我觉得nanocode做的很好的一个地方就是它能加载符号,如果用intel system studio的话,如果我没记错应该是不能加载符号的,而且nanocode对linux内核调试的支持也很好,gdk7装了两个系统,一个win10,一个乌班图,可以在开机时选择调试那个系统,如果你对这个感兴趣的话可以看看
http://advdbg.org/gdk/


还有一些我之前看到的资料也放上来吧









nj001 发表于 2020-7-9 12:54

wangyujie96 发表于 2020-7-9 09:39
好像vt刚出来的时候也说几乎没有反调试方法,然而?

vt是软件层的,既然是软件那么容易被搞也正常,这东西可就是硬件调试器了,有可能被反调试,但是我暂时想不到什么方法

observer6 发表于 2021-9-19 17:46

baolei1988 发表于 2020-7-10 17:09
这个是内核debug调试么

可以做内核调试,我有好几台dci调试设备。有一台t460s 开启了dci调试功能,可以转让给你,有意私信吧。

jc021227 发表于 2020-7-8 20:09

感谢lz,学习了

minibeetuaman 发表于 2020-7-8 21:21

为了拿衣服LZ也是够拼了!

wasami 发表于 2020-7-9 02:51

套路深了一些哦baby

wangyujie96 发表于 2020-7-9 09:39

好像vt刚出来的时候也说几乎没有反调试方法,然而?

deng00200 发表于 2020-7-9 11:30

yao5201478 发表于 2020-7-9 16:32


谢谢分享,学习了~!

砂砾酱 发表于 2020-7-10 11:39

amd的cpu有类似的jtag 教程吗?

nj001 发表于 2020-7-10 14:16

砂砾酱 发表于 2020-7-10 11:39
amd的cpu有类似的jtag 教程吗?

有仿真器,至于是否支持jtag我也不清楚,可以去官网看看,不过就是支持jtag,配件也会很贵的
页: [1] 2
查看完整版本: 对windows和linux内核调试套件gdk7和intel dci 硬件调试技术的一个简单评测