Windbg——ReadVirtual: not properly sign extended

在使用Windbg对windows XP系统进行内核调试时,查看SSDT表某个函数,如NTCreateFile的函数地址时,提示如下:

0: kd> u 8057d330
ReadVirtual: 8057d330 not properly sign extended
8057d330 8bff            mov     edi,edi
ReadVirtual: 8057d340 not properly sign extended
8057d332 55              push    ebp
8057d333 8bec            mov     ebp,esp
8057d335 33c0            xor     eax,eax
8057d337 50              push    eax
8057d338 50              push    eax
8057d339 50              push    eax
8057d33a ff7530          push    dword ptr [ebp+30h]

ReadVirtual: 8057d340 not properly sign extended

这个提示一直困扰了我很久,后来才知道可以通过以下方式解决。

1、这个问题是由于你正在尝试反汇编一个使用 32 位地址的内核代码,但你的 windbg 配置成了对 64 位地址进行解码。在 Windows 的 x64 架构上,所有内核模式的地址都是在高位 32 位的地址空间,也就是说,如果一个内核地址是合法的,它的高位应该是全 1 或全 0。所以当你尝试去反汇编一个低位 32 位地址的代码时,windbg 认为这个地址没有被正确地符号扩展,于是就抛出了这个错误。

解决这个问题的办法是将 32 位的地址扩展为 64 位的地址。假设你的地址是 0x8057d330,你可以尝试将其扩展为 0xffffffff8057d330,然后再使用 u 命令进行反汇编。

1: kd> u ffffffff8057d330
nt!NtCreateFile:
8057d330 8bff            mov     edi,edi
8057d332 55              push    ebp
8057d333 8bec            mov     ebp,esp
8057d335 33c0            xor     eax,eax
8057d337 50              push    eax
8057d338 50              push    eax
8057d339 50              push    eax
8057d33a ff7530          push    dword ptr [ebp+30h]

2、在WinDbg中打开文件菜单,选择 “Symbol File Path”。加载符号文件:

在 “Symbol search path” 对话框中,输入以下内容:

srv*c:\symbols*https://msdl.microsoft.com/download/symbols

这将设置 WinDbg 以从 Microsoft 的 symbol 服务器下载 symbol。符号文件将保存在C:\symbols目录下。

点击 “OK” 以关闭对话框。

在WinDbg命令行中,输入以下命令来重新加载symbols:

.reload /f
然后你应该可以使用 u 命令来反汇编地址了,例如:

0: kd> u nt!NTCreateFile
nt!NtCreateFile:
8057d330 8bff            mov     edi,edi
8057d332 55              push    ebp
8057d333 8bec            mov     ebp,esp
8057d335 33c0            xor     eax,eax
8057d337 50              push    eax
8057d338 50              push    eax
8057d339 50              push    eax
8057d33a ff7530          push    dword ptr [ebp+30h]

总结:
不管怎么样都需要在地址前面加8个F来使地址被正确的符号扩展。这也许跟我的宿主机是X64有关,windbg跟着所在环境走的?
有知道的大佬可以留言探讨~

都看到这儿了,留个赞再走?
在这里插入图片描述

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值