如何在WinDBG命令中传入十六进制数字?

0 投票
2 回答
611 浏览
提问于 2025-04-18 11:38

我对十六进制和Windows调试器命令还不太熟悉。现在我正在写一个Python脚本,里面调用了一个叫做'.writemem'的函数,传入一个文件名、一个起始地址和要写入的字节数。到目前为止,我的代码是这样的:

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

在这里,beginAddress是一个以十六进制形式表示的起始地址字符串,而size也是一个十六进制字符串。那个单独的'L'是用来表示我不想指定一个地址范围,而是只指定一个起始地址和一个大小。

我找到的几个运行这个命令的例子都没有在这两个字符串的开头加上'0x',我在想我是否需要这样做。我有点担心直接运行看看,因为writemem是一个比较危险的函数,不太好随便尝试。你们有什么建议,关于如何格式化这个十六进制的内容吗?

2 个回答

0

可以查看hex这个函数。它的作用是把整数转换成十六进制的形式。

2

默认情况下,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

顺便提一下:要注意一下范围限制,对于超过512 kB的区域,要使用L?这种语法。

撰写回答