x (Examine Symbols)

x命令在所有与指定模式匹配的上下文中显示符号。

x [Options] Module!Symbol
x [Options] *

参数:

  • Options
    特定符号搜索选项。您可以使用以下一个或多个选项:
    /0
    只显示每个符号的地址。

    /1
    只显示每个符号的名称。

    /2
    只显示每个符号 (而非数据类型) 的地址和名称。

    /D
    使用调试器标记语言显示输出。

    /t
    如果数据类型已知, 则显示每个符号的数据类型。

    /v
    显示每个符号的符号类型 (本地、全局、参数、函数或未知)。 此选项还显示每个符号的大小。 函数符号的大小是内存中函数的大小。 其他符号的大小是该符号表示的数据类型的大小。 大小始终以字节为单位进行度量并以十六进制格式显示。

    /s 大小
    仅显示大小 (以字节为单位) 等于大小值的符号。 函数符号的大小是内存中函数的大小。 其他符号的大小是该符号表示的数据类型的大小。 始终显示大小无法确定的符号。 大小必须为非零整数。

    /q
    显示带引号格式的符号名称。

    /p
    当调试器显示函数名称及其参数时, 省略左括号前的空格。 如果要将函数名称和自变量从x显示复制到其他位置, 这种类型的显示可以简化。

    /f
    显示函数的数据大小。

    /d
    显示数据的数据大小。

    /a
    按地址对显示按升序排序。

    /A
    按地址降序排序。

    /n
    按名称对显示顺序进行升序排序。

    /N
    按名称对显示顺序按降序排序。

    /z
    按大小以升序对显示进行排序。

    /Z
    按大小降序排序显示。

  • Module
    指定搜索模块。这个模块可以是EXE,DLL,或SYS文件。模块可以包含野生动物特性和规格的多样性。
  • Symbol
    指定符号必须包含的模式。符号可以包含各种通配符和说明符。由于此模式与符号匹配,因此匹配不区分大小写,并且单个前导下划线(u)表示任何数量的前导下划线。可以在符号中添加空格,以便可以指定包含空格的符号名称(例如“operator new”或“template<a,b>”),而不使用通配符。

环境:

模式

用户模式, 内核模式

目标

实时, 故障转储

平台

全部

以下命令将查找 MyModule 中包含字符串 "spin" 的所有符号。

0:000> x mymodule!*spin*

以下命令快速查找 MyModule 中的 "DownloadMinor" 和 "DownloadMajor" 符号。

0:000> x mymodule!downloadm??or

你还可以使用以下命令显示 MyModule 中的所有符号。

0:000> x mymodule!*

上述命令还强制调试器重载 MyModule 中的符号信息。 如果要使用最小显示重载模块中的符号, 请使用以下命令。

0:000> x mymodule!*start*

几个符号始终包含字符串 "start"。 因此, 前面的命令将始终显示某些输出, 以验证该命令是否正常工作。 但前面的命令避免了过多的显示长度x mymodule*!

显示显示每个符号的起始地址和完整符号名称。 如果符号是函数名称, 则该显示还包含其参数类型的列表。 如果符号是全局变量, 则显示其当前值。

X命令有一种特殊情况。 若要显示当前上下文的所有局部变量的地址和名称, 请使用以下命令。

0:000> x *

请注意   , 在大多数情况下, 除非已加载私有符号, 否则不能访问局部变量。  若要显示局部变量的值, 请使用dv (显示局部变量)命令。

下面的示例演示 /0/1/2选项。

0:000:x86> x /0 MyApp!Add*
00b51410
00b513d0 0:000:x86> x /1 MyApp!Add*
MyApp!AddThreeIntegers
MyApp!AddTwoIntegers 0:000:x86> x /2 MyApp!Add*
00b51410 MyApp!AddThreeIntegers
00b513d0 MyApp!AddTwoIntegers

如果要使用x命令的输出作为foreach命令的输入, 则 /0/1/2选项非常有用。

.foreach ( place { x /0 MyApp!*MySym*} ) { .echo ${place}+0x18 }

下面的示例演示用于在模块 notepad.exe 上筛选函数的开关 /f

0:000> x /f /v notepad!*main*
prv func 00000001`00003340 249 notepad!WinMain (struct HINSTANCE__ *, struct HINSTANCE__ *, char *, int)
prv func 00000001`0000a7b0 1c notepad!WinMainCRTStartup$filt$0 (void)
prv func 00000001`0000a540 268 notepad!WinMainCRTStartup (void)

使用 /v选项时, 显示的第一列显示符号类型 (local、global、parameter、function 或 unknown)。 第二列是符号的地址。 第三列是符号的大小 (以字节为单位)。 第四列显示模块名称和符号名称。 在某些情况下, 此显示后跟一个等号 (=), 然后是符号的数据类型。 还显示符号的源 (公共或完整符号信息)。

kd> x /v nt!CmType*
global 806c9e68 0 nt!CmTypeName = struct _UNICODE_STRING []
global 806c9e68 150 nt!CmTypeName = struct _UNICODE_STRING [42]
global 806c9e68 0 nt!CmTypeName = struct _UNICODE_STRING []
global 805bd7b0 0 nt!CmTypeString = unsigned short *[]
global 805bd7b0 a8 nt!CmTypeString = unsigned short *[42]

在前面的示例中, 大小以十六进制格式提供, 而数据类型以十进制格式提供。 因此, 在前面的示例的最后一行中, 数据类型是指向无符号短整数的42指针的数组。 此数组的大小为 42*4 = 168, 168 以十六进制格式显示为0xA8。

您可以使用 /s size 选项来仅显示大小 (以字节为单位) 为特定值的符号。 例如, 可以将前面的示例中的命令限制为表示大小为0xA8 的对象的符号。

kd> x /v /s a8 nt!CmType*
global 805bd7b0 a8 nt!CmTypeString = unsigned short *[42]

使用数据类型

/T选项使调试器显示有关每个符号的数据类型的信息。 请注意, 对于许多符号, 即使没有 /t选项, 也会显示此信息。 使用 /t时, 此类符号的数据类型信息显示两次。

0:001> x prymes!__n*
00427d84 myModule!__nullstring = 0x00425de8 "(null)"
0042a3c0 myModule!_nstream = 512
Type information missing error for _nh_malloc
004021c1 myModule!MyStructInstance = struct MyStruct
00427d14 myModule!_NLG_Destination = <no type information> 0:001> x /t prymes!__n*
00427d84 char * myModule!__nullstring = 0x00425de8 "(null)"
0042a3c0 int myModule!_nstream = 512
Type information missing error for _nh_malloc
004021c1 struct MyStruct myModule!MyStructInstance = struct MyStruct
00427d14 <NoType> myModule!_NLG_Destination = <no type information>

X 命令将显示某个类型的实例。

0:001> x foo!MyClassInstance
00f4f354 foo!MyClassInstance = 0x00f78768

X 命令不显示任何内容, 只基于类型的名称。

0:001> x foo!MyClass
0:001>

若要使用类型的名称显示类型信息, 请考虑使用dt (显示类型), 它提供类型和类型实例的信息:

0:001> dt foo!MyClass
+0x000 IntMemberVariable : Int4B
+0x004 FloatMemberVariable : Float
+0x008 BoolMemberVariable : Bool
+0x00c PtrMemberVariable : Ptr32 MyClass

使用模板

您可以使用包含 x 命令的通配符来显示模板类, 如本示例中所示。

dbgcmd
0:001>  x Fabric!Common::ConfigEntry*TimeSpan?
000007f6`466a2f9c Fabric!Common::ConfigEntry<Common::TimeSpan>::ConfigEntry<Common::TimeSpan> (void)
000007f6`466a3020 Fabric!Common::ConfigEntry<Common::TimeSpan>::~ConfigEntry<Common::TimeSpan> (void)

使用模板时, 请考虑使用dt (显示类型)命令, 因为 x 命令不显示单个模板类项。

0:001> dt foo!Common::ConfigEntry<Common::TimeSpan>
+0x000 __VFN_table : Ptr64
+0x008 componentConfig_ : Ptr64 Common::ComponentConfig
+0x010 section_ : std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >
+0x038 key_ : std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >

WinDbg常用命令系列---检查符号X的更多相关文章

  1. WinDbg常用命令系列---符号相关命令

    ld (Load Symbols) ld命令加载指定模块的符号并更新所有模块信息. ld ModuleName [/f FileName] 参数: ModuleName指定要加载其符号的模块的名称.m ...

  2. WinDbg常用命令系列---显示数据类型dt/dtx

    dt (Display Type) dt命令显示有关局部变量.全局变量或数据类型的信息.这可以显示有关简单数据类型以及结构和联合的信息. 用户模式下: dt [-DisplayOpts] [-Sear ...

  3. WinDbg常用命令系列---内存数据显示和对应符号显示d*s(dds、dps、dqs)

    命令dds, dps,  dqs显示给定范围内的内存内容.假定该内存是符号表中的一系列地址.相应的符号也会显示出来. dds [Options] [Range] dqs [Options] [Rang ...

  4. WinDbg常用命令系列---断点操作b*

    ba (Break on Access) ba命令设置处理器断点(通常称为数据断点,不太准确).此断点在访问指定内存时触发. 用户模式下 [~Thread] ba[ID] Access Size [O ...

  5. WinDbg常用命令系列---!uniqstack

    简介 这个!uniqstack扩展扩展显示的所有线程的堆栈的所有当前进程,不包括显示为具有重复项的堆栈中. 使用形式 !uniqstack [ -b | -v | -p ] [ -n ] 参数 -b将 ...

  6. WinDbg常用命令系列---.cmdtree

    .cmdtree 简介 使用形式 .cmdtree cmdfile 参数 cmdfile命令文件,包含多个你需要的命令.必须是一个文本档 使用步骤 1.使用命令创建文本文件test.wl,使用以下示例 ...

  7. WinDbg常用命令系列---源代码操作相关命令

    lsf, lsf- (Load or Unload Source File) lsf和lsf-命令加载或卸载源文件. lsf Filename lsf- Filename 参数: Filename指定 ...

  8. WinDbg常用命令系列---显示段选择器dg、链接列表dl和字符串ds/dS

    dg (Display Selector) dg命令显示指定选择器的段描述符. dg FirstSelector [LastSelector] 参数: FirstSelector指定要显示的第一个选择 ...

  9. WinDbg常用命令系列---线程相关操作~*

    ~ (Thread Status) 波浪符(~)命令显示指定线程或当前进程中所有线程的状态. ~ Thread 参数: Thread指定要显示的线程.如果省略此参数,将显示所有线程. 环境: 模式 仅 ...

随机推荐

  1. 论DOM中文档和元素的位置大小属性及其区别

    element.offsetLeft/Top  获取元素相对于最近的有定位的父元素的坐标,如果没有有定位的父元素,则是文档坐标 element.scrollTop/Left 获取元素滚动卷去的距离 e ...

  2. 一张图看懂SharpCapture

    通过下面的图片,可以瞬间看懂整个类库的脉络.

  3. 矩量母函数(Moment Generating Function,mgf,又称:动差生成函数)

    在统计学中,矩又被称为动差(Moment).矩量母函数(Moment Generating Function,简称mgf)又被称为动差生成函数. 称exp(tξ)的数学期望为随机变量ξ的矩量母函数,记 ...

  4. git安装用法和常用命令

    目录 git 下载 安装 git 工作中常用命令 Git常用命令汇总以及其它相关操作 或者 常出错误: 常用修改: 题外话(相关概念) git 下载 安装 1.下载Git,官网地址:https://g ...

  5. ES6 新增基本数据类型Symbol

    ES6 增加了一个新的基本数据类型 symbol. 不过,和其他基本数据类型相比,它有点与众不同,因为它没有字面量的表现形式,而且创建的方式也有点奇怪,只能通过调用全局函数Symbol()来完成. l ...

  6. Flink入门 - API

    final StreamExecutionEnvironment streamExecutionEnvironment = StreamExecutionEnvironment.getExecutio ...

  7. 嵌入式应用开发第四阶段-基于rk3399的视频监控系统

    一.需求分析 伴随着嵌入式技术.图像处理技术和无线网络传输技术的发展,传统模拟视频监控系统和基于PC的远程视频监控系统由于自身的不足,已经无法满足现代社会应用中不断涌现出来的新需求,于是基于嵌入式技术 ...

  8. xml和json的判断格式是否相等

    手动撸了个 xml 和 json 格式匹配的代码. /** * 判断数据的结构.遍历节点然后去对应的json那边查找是否存在这样的节点 * * @param root 配置的xml所对应的对Eleme ...

  9. SQL Server行转列、不确定列的行转列

    本文使用的方法: 1.用Case When 2.PIVOT函数 首先,模拟一张表: -- 创建模拟数据 CREATE TABLE #TempSubjectResult ( StudentName NV ...

  10. BootstrapValidator 表单验证超详细教程

    一. 引入js 和css文件 在有jquery和bootstrap的页面里引入 bootstrapValidator.js bootstrapValidator.css 链接: https://pan ...