Windbg——ReadVirtual: not properly sign extended

2023-10-27 18:50

本文主要是介绍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跟着所在环境走的?
有知道的大佬可以留言探讨~

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

这篇关于Windbg——ReadVirtual: not properly sign extended的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/287659

相关文章

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【codeforces】484E. Sign on Fence 可持久化线段树

传送门:【codeforces】484E. Sign on Fence 题目分析:看了题解才会呢,感觉太巧妙了~ 先对高度从高到低排序,然后构造可持久化线段树,每个节点保存一个高度下对应区间的左连续最大1个数,右连续最大1个数,区间最长连续1个数,然后查询一个区间内最长连续1长度就是线段树区间合并操作。每次询问【L,R,W】就是二分询问的高度(每个高度是一棵线段树),然后看询问区间的连续

php 苹果登录 Sign In with Apple 服务端处理

苹果登录会验证用户:identityToken 的合法性,验证方法是JWT验证。   完整的验证identityToken的代码可参考:https://github.com/GriffinLedingham/php-apple-signin  use AppleSignIn\ASDecoder; $identityToken = Request::instance()->param('id

DESUtils 加解密时 Given final block not properly padded bug小记

事情的经过是这个样子的。。。。。。 先说说问题是怎么出现的。根据客户需求,需要完成一个一键登录的功能,于是我的项目中就诞生了DesUtil,但是经过上百次用户测试,发现有一个用户登录就一直报错!难道又遇到神坑啦!!发火 让我们先看看源代码,干货来了! package com.kwp.main.util.security;import java.io.IOException;import

[Ora]-1309. OCI is not properly installed on this machine (NOE1/INIT)或者[FireDAC][Phys][Ora]-314. Can

oracle免安装驱动问题 问题处理: 1.安装oracle数据库包(Oracle10g第2版vista_w2k8_x86_production_db)。 2.安装XE10.1。 3.把oci.dll、oraocci10.dll、oraociei10.dll、orasql10.dll放在XE安装目录下的“\bin”文件夹下面。 4.发布程序时,EXE同目录也代上这几个DLL。 驱动下载

Extended Line Description in Halcon and OpenCV

In HALCON, the term XLD refers to “Extended Line Description.” XLDs are used to represent precise geometrical features, such as lines, contours, ellipses, and polygons, at a subpixel level for high-pr

在postman中使用javascript脚本生成sign签名

大多数线上api接口服务都需要提供签名才可以正常访问。虽然带来了安全,单有时为了快速验证接口的某个功能,就不得不编写代码,计算签名然后再请求。那么,使用postman提供的script功能,是否能实现签名计算功能吗?答案是:可以! 假设,我们有个服务,需要在请求header中传入:reqId和reqTime,以及sign三个字段,签名规则如下: sign = md5(reqId + reqTi

第三十二篇:Windbg中USB2.0调试环境的搭建

2011年的时候,为了开发USB Mass storage -- UASP (USB attached SCSI Protocol)的设备驱动程序,从米国买了两个USB2.0的调试小设备(如下图,每个似乎80美刀,贼贵的东西)。 主要是用来替代串口115200波特率的响应速度慢,以便解决调试效率的问题。 当时,根据WINDBG的HELP文档,而且也GOOGLE了一些网上的相关参考内容,硬

第三十一篇:!pci of WinDbg

刚刚在看WinDbg在硬件调试方面有哪些扩展命令的时候,让我回想起一个工作中的实际事务。 在xHCI USB3.0/3.1 IP项目开发过程中,需要得到类似实际产品的PCIe配置空间信息,以作对比参考。 当时的做法是,将类似产品的xHCI host controller通过PCIe口接到SoC系统中, 通过编写ARM SoC的Bare metal代码来读取每一个产口的PCIe配置空间。

第三十篇:Windbg的基础知识

Windbg是一个非常强大的工具. 刚刚开始,是为了替代SoftICE调试自己开发的AVStream/BDA驱动程序,以及分析由此驱动软件产生的Kernel Dump. 之后,参与xHCI USB3.0/3.1 IP的开发,Windbg主要用来分析该硬件产生的Kernel Dump. 第二篇:欲善其事,先利其器-USB3.0 Kernel debug extension 第五