【问题标题】:How to pass hexadecimal numbers into a WinDBG command?如何将十六进制数字传递给 WinDBG 命令?
【发布时间】:2014-06-30 21:38:13
【问题描述】:

我对十六进制和 Windows 调试器命令非常陌生。我正在尝试编写一个 python 脚本,在其中调用 '.writemem 函数,提供文件名、起始地址和要写入的字节数。到目前为止,这是我所拥有的:

cmdstr = ".writemem " + filename + " " + startAddress + " L" + size
dbgCommand(cmdstr)

其中beginAddress是十六进制形式的起始地址字符串,size也是十六进制字符串。唯一的“L”表示我不想指定地址范围,而是指定开始和大小。

我发现运行此命令的几个示例都省略了两个字符串开头的“0x”,我想知道是否需要这样做。我有点害怕运行它看看,因为 writemem 是一个危险的函数。任何想法如何格式化这个十六进制?

【问题讨论】:

  • 澄清一下,我的变量已经是十六进制形式(作为字符串),前面带有“0x”,我想知道在将这些参数传递给 dbgCommand 之前是否需要删除这个前缀。

标签: python windbg hex


【解决方案1】:

默认情况下,WinDbg 将数字视为十六进制,因此 0x 前缀是可选的。但是,我更愿意更明确地保留0x前缀。

您可以使用? 命令尝试:

0:003> ? f
Evaluate expression: 15 = 00000000`0000000f
0:003> ? 0xf
Evaluate expression: 15 = 00000000`0000000f

如果要使用十进制值,可以使用0n前缀:

0:003> ? 0n15
Evaluate expression: 15 = 00000000`0000000f

顺便说一句:注意the range limit 并为大于512 kB 的区域使用L? 语法。

【讨论】:

    【解决方案2】:

    参见hex 函数。将 int 转换为十六进制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-13
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      • 2020-06-21
      • 1970-01-01
      相关资源
      最近更新 更多