pci串行口驱动([x86]Windows底层暴力破解 (二))

pci串行口驱动
(本章我们会继续讲解windbg ACPI debug相关的命令)

关于windbg的symbol server:

Windbg的symbol server地址是http://msdl.microsoft.com/download/symbols在symbol file path中可以输入网络地址也可以输入本地路径。如果要输入多个路径可以使用分号(;)来分割。例如“srv*D:Symbolswin9600*http://msdl.microsoft.com/download/symbols;”表示windbg会先从d:symbolswin9600中找symbol,如果没有则从http中搜索,搜索到后就将http中的symbol server中的symbol拷贝到d:symbolswin9600这个文件夹下。如果需要将所有的symbol都dump到本地的文件夹,需要使用.reload /f /i /s命令,其中/f是必须的,否则将只会加载目前用到的module的symbol。
Target端用图形界面快速设定:

用win+R快捷键调出启动窗口,在这个窗口中输入msconfig,然后点运行。进入系统配置页面,选择”引导”选项卡,然后选择”高级选项”,勾选”调试”选项,并进行相应的调试设置。确定后重启即可。

Windows系统在启动过程中会调用KdDebuggerInitialize0来对通信扩展模块进行初始化,此时会进行COM端口的初始化。当初始化COM端口后,HAL模块中会有一个全局变量记录下已被内核调试使用的COM端口,此后的串行口驱动程序(serial.sys)会检查这个变量,并跳过用于调试用途的串行端口,因此,在目标系统的设备管理器中我们看不到用于内核调试的串行端口。

ACPI debug相关的windbg指令:

!sym设置显示symbol加载详细信息,及连接symbol server时是否提示格式:
!sym<noisy/quiet – prompts/prompts off>说明:
!sym noisy表示在加载symbol时打出信息。Quiet则关闭这些信息。默认为关闭。!sym prompts表示在连接symbol server时,允许弹出身份验证对话框。否则可能造成连接失败。实例:

 .sympath是用来设置sympath的命令。
格式:
.sympath[+] [Path [; …]]
说明:
如果什么参数都不加,则表示显示当前的symbol path。如:.sympath
.sympathc:path1; d:path2表示将当前的sympath设置成后面给的路径,会替代以前的设置。多个路径需要用“;”分号隔开。
.sympath+c:path1;d:path2表示在当前路径后面加上path1和path2。这个会保留以前的路径。
实例:

!amli dns显示ACPI namespace对象的类型。这个与!amli find命令联合使用效果较好。
格式:
!amlidns [/s] [Name | Address]说明:
!amli dns_sb.pci0表示查询_sb.pci0这个namespace object的具体类型。
!amli dns /s_sb.pci0表示查询_sb.pci0这个namespace object的具体类型,并列出它下面的所有namespace对象,包括field,device,method等。只列出名字和路径。
!amli dns /s ffffe00004b65990表示查询ffffe00004b65990地址的namespace object,并列出它下面所有的subtree。
实例:
!amli dns name的例子

!amli dns /s name的例子

!amli dns address的例子

!amli find格式:
!amli find Name
说明:
!amli find Name是在namespace中查找包含name字符的所有object名称,并显示全路径。通常这个命令与!amli u和!amli dns配合使用。
Name:Specifies the name of the namespace object (without the path).
实例:

!amli u格式:
!amli u [MethodName | CodeAddress ]
说明:
将method名称或给定的地址,反编译成ASL代码。通常在调试跟踪acpi method执行时,查询中间调用method使用。
MethodName:Specifies the full path of the method name to be disassembled.
CodeAddress:Specifies the address of the AML code where disassembly will begin. If CodeAddress is prefixed with two percent signs (%%), it is interpreted as a physical address. Otherwise, it is interpreted as a virtualaddress
实例:
!amli u _sb.lnka的例子,lnka不是method是device。所以这个指令会返回错误

!amli u MethodName的例子

!amli u CodeAddress的例子,在这个例子中需要注意用dns看到的method不要用namespaceobject的address,需要使用下面method中codebuff显示出来的地址。否则会报错“failedto allocate code buffer (size=-586)”

!amli bp格式:
    !amlibp { MethodName | CodeAddress }
说明:
给method下断点。这个命令通常与set lbrkon联合使用。The AMLI Debugger supports a maximum of 10breakpoints
MethodName:Specifies the full path of the method name on which the breakpointwill be set.
CodeAddress:Specifies the address of the AML code at which the breakpoint willbe set. If CodeAddress is prefixed with two percent signs (%%), it isinterpreted as a physical address. Otherwise, it is interpreted as a virtualaddress.
实例:
!amli bp MethodName的例子

!amli bp CodeAddress的例子

到bp点停止的例子,“Hitbreakpoing 1”表示因为进入了break point 1。

!amli bl格式:
!amli bl说明:
列出当前设置的所有断点。最大支持10个断点。在显示条目中<e>表示当前断点是enable的,<d>表示当前断点是disable的。数字表示breakpoint的号,这个号被!amli bc, bd, be命令使用。
实例:

!amli bc格式:
!amlibc Breakpoint
!amli bc *
说明:
永久清除一个或所有断点。!amli bc *表示清除所有断点。Breakpoint是0到9的数字,是断点号。
Breakpoint:Specifies the number of the breakpoint to be cleared.
 * :Specifies that all breakpoints should be cleared.
实例:

!amli bd格式:
!amli bd Breakpoint
!amli bd *
说明:
临时disable一个设置好的断点。如果输入的breakpoint号是不存在的,则指令没有任何反应Breakpoint:Specifies the numberof the breakpoint to be disabled.*:Specifies that all breakpoints should be disabled
实例:

!amli be格式:
!amlibe Breakpoint!amli be *说明:
重新激活一个被disable的断点。Breakpoint:Specifies the numberof the breakpoint to be disabled.
*:Specifies that all breakpoints should be disabled.
实例:

!amli lc格式:
!amli lc
说明:
列出所有active的acpi context。这个命令通常在调试跟踪acpi method时使用,也经常和!amli r命令一起使用。它的返回值包含了几个关键字:Ctxt, ThID, Flgs, pbOp和Obj。Obj给出了method在namespace中的完整路径。Ctxt给出了context block的地址,如果这个地址前面有*号,则说明这个是当前正在运行被中断的context。pbOp给出了指令指针。Flgs给出了标志位信息。如果某个标志没有置位,则相应的位置上是“-”,否则就是字母。标志位具体如下:

Flag Meaning A Asynchronous evaluation N Nested evaluation Q In the ready queue C Needs a callback R Running W Ready T Time-out D Timer dispatch P Timer pending

实例:

!amli r格式:
!amlir [ContextAddress]
说明:
显示context的内容,通常和!amli lc一起使用。当acpi debugger突然因为错误停下时,这个命令可以快速的显示当前的执行状况。
ContextAddress:Specifies the address of the context block to be displayed. The address of a context block can be determined from the Ctxt field in the !amli lc display. If ContextAddress is prefixed with two percent signs (%%), it is interpreted as a physical address. Otherwise, it is interpreted as a virtual address. If this parameter is omitted, the current context is displayed.
实例:

!amli ln格式:
!amli ln [ MethodName | CodeAddress ]
说明:
displays the specified method or the method containing a given address。这个命令主要用于查询地址是从属于哪个method的。因为dns指令只认识method的开始地址,中间地址dns会报错。但是ln命令可以查中间地址是属于哪个method的。实例:

最后有几个工作机会给大家分享下,机不可失,有兴趣的小伙伴可以自己联系哦

Job1:字节跳动若干职位,大家可以扫描以下二维码:

JD2:全球五百强企业,工作地点深圳,岗位为学习岗型,需求9人;
需要技能:
1.熟悉CXL协议;2.熟悉PCIe协议;3.熟悉InfiniBand协议4.熟悉其他芯片高速协议5.熟练掌握芯片前端数字逻辑设计 6.熟练掌握芯片数字逻辑仿真验证;7.逻辑思维能力强,主动性强,学习能力强。
7为必要条件,1-6任意满足一个,满足两个条件或以上,优先考虑薪资待遇:根据面试结果,待遇丰厚,年薪预计130%-200%或以上

有意者请发简历到fleeves@163.com

pci串行口驱动相关文章

版权声明

您可能感兴趣