如何用 windbg 导出 C# 中的 string 内容?

咨询区

  • driis

我在用 windbg 调试一个生产上的 程序卡死 故障 ,在线程栈上有一个 string 类型的参数相当大,我用 !dumpobj 命令不能正常显示内容,参考如下:

0:036> !do 00000001b30d8668
Name: System.String
MethodTable: 0000064278436728
EEClass: 000006427803e520
Size: 5125300(0x4e34b4) bytes(C:\WINDOWS\assembly\GAC_64\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)
String: <String is invalid or too large to print>Fields:MT    Field   Offset                 Type VT     Attr            Value Name
000006427843d998  4000096        8         System.Int32  1 instance          2562638 m_arrayLength
000006427843d998  4000097        c         System.Int32  1 instance          2562637 m_stringLength
0000064278438170  4000098       10          System.Char  1 instance               3c m_firstChar
0000064278436728  4000099       20        System.String  0   shared           static Empty>> Domain:Value  0000000000163260:000000007fff0370 00000000001a6760:000000007fff0370 <<
0000064278438020  400009a       28        System.Char[]  0   shared           static WhitespaceChars>> Domain:Value  0000000000163260:000000007fff0b60 00000000001a6760:000000007fff89f0 <<

请问我该如何将 string 内容导出来,如果能导出到文件中就更好了。

回答区

  • Naveen

下面是一个可以将 string 导出到 文本的脚本,你可以试试看。

$$ Dumps the managed strings to a file
$$ Platform x86
$$ Usage $$>a<"c:\temp\dumpstringtofolder.txt" 6544f9ac 5000 c:\temp\stringtest
$$ First argument is the string method table pointer
$$ Second argument is the Min size of the string that needs to be used filter
$$ the strings
$$ Third is the path of the file
.foreach ($string {!dumpheap -short -mt ${$arg1}  -min ${$arg2}})
{ $$ MT        Field      Offset               Type  VT     Attr    Value Name$$ 65452978  40000ed        4         System.Int32  1 instance    71117 m_stringLength$$ 65451dc8  40000ee        8          System.Char  1 instance       3c m_firstChar$$ 6544f9ac  40000ef        8        System.String  0   shared   static Empty$$ start of string is stored in the 8th offset, which can be inferred from above$$ Size of the string which is stored in the 4th offsetr@$t0=  poi(${$string}+4)*2.writemem ${$arg3}${$string}.txt ${$string}+8 ${$string}+8+@$t0
}

接下来就可以用如下命令将其导出到 c:\temp\stringtest 文件中。

$$>a<”c:\temp\dumpstringtofolder.txt” 6544f9ac 5000 c:\temp\stringtest

需要提一下的是 C# 中的 string 内容是 unicode 格式,你用文本文件打开的时候注意改成 unicode 。

  • Brian Rasmussen

你可以用 du 命令查看内存地址的内容,格式如下:

du <address+offset> <end address>

输出内容大概如下:

00000000`132ab050  "this is an extremely long string"
00000000`132ab090  " of text, so don't even bother t"
00000000`132ab0d0  "o try to dump it to the screen -"

点评区

这是在 高级调试 中经常会遇到的问题,我个人的用法还是 .writemem startaddress L?length  模式,这里我举个例子:

0:000> !do -nofields 000001eb2a587cf8
Name:        System.String
MethodTable: 00007ffc403d6948
EEClass:     00007ffc3fcd50e0
Size:        38(0x26) bytes
File:        C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
String:      小容量注射液

可以看到当前内容是 小容量注射液 ,length 是 0x26 ,所以导出命令就是:

0:000> .writemem C:\1.txt 000001eb2a587cf8 L?0x26 
Writing 26 bytes.

可以看到已经成功写入 26byte

d9bdfb7375f7416cfdf7c41b5e963632.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《零基础看得懂的C语言入门教程 》——(四)C语言的基本数据类型及变量

一、学习目标 了解C语言的基本数据类型了解变量的基本概念了解变量的使用方法了解了变量的命名方法了解格式占位符了解变量的输出 目录 C语言真的很难吗&#xff1f;那是你没看这张图&#xff0c;化整为零轻松学习C语言。 第一篇&#xff1a;&#xff08;一&#xff09;脱离…

android一句话搞定图片加载

http://square.github.io/picasso/ Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); gradle中添加 compile com.squareup.picasso:picasso:2.5.2 转载于:https://www.cnblogs.com/rwxwsblog/p/5467874.html

转HTML+CSS总结/深入理解CSS盒子模型

原文地址&#xff1a;http://www.chinaz.com/design/2010/1229/151993.shtml 前言&#xff1a;前阵子在做一个项目时&#xff0c;在页面布局方面遇到了一点小问题&#xff0c;于是上stackoverflow上求助。ifaou在帮助我解决我问题的同时&#xff0c;还推荐我阅读一篇有关CSS盒子…

主成分分析步骤_多元分析(1)--主成分分析

主成分分析主成分分析&#xff08;PCA&#xff09;是数据降维的一种常见方法&#xff0c;其它常见的方法还有因子分析&#xff08;FA&#xff09;,独立成分分析&#xff0c;在进行大数据处理时&#xff0c;因为数据有很多特征&#xff0c;维数过高&#xff0c;不容易进行处理且…

ArcGIS实验教程——实验十九:网络分析(最短路径实现)

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 一、实验描述 网络分析模块用于实现基于网络数据集的网络分析功能,包括路径分析、服务区分析、最近设施点分析、OD成本矩阵分析、多路径配送分析、位置分配分析和高级网络的管理与创建等。 网络…

设计模式之策略模式和状态模式

1 策略模式 我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法&#xff0c; 我们可以简单理解为更加不同的策略对象&#xff0c;执行不同策略方法。 2 类图 3 代码实现 1&#xff09;接口&#xff1a;Strat…

期待已久的Java 9 今日发布

人们期待已久的Java SE 9.0将在2017年9月21日发布&#xff0c;它会带来一些重要的变化。\\JDK 9的核心变化就是引入了一种新的Java编程组件&#xff0c;也就是模块&#xff0c;按照Oracle的说法&#xff0c;它是一个可命名的、自描述的代码和数据集合。模块技术的核心目标是减少…

AspNetCore7.0源码解读之UseMiddleware

前言本文编写时源码参考github仓库主分支。aspnetcore提供了Use方法供开发者自定义中间件&#xff0c;该方法接收一个委托对象&#xff0c;该委托接收一个RequestDelegate对象&#xff0c;并返回一个RequestDelegate对象&#xff0c;方法定义如下&#xff1a;IApplicationBuild…

边工作边刷题:70天一遍leetcode: day 11-3

Single Number I/II II的python解是网上抄的&#xff0c;其实可以AC&#xff0c;但是python不会像c/java那样自动overflow&#xff0c;而是转化成long。所以如果有负数的情况会得到一个巨大的正数解&#xff0c;比如 Input:[-2,-2,1,1,-3,1,-3,-3,-4,-2] Output:4294967292 Exp…

《零基础看得懂的C语言入门教程 》——(五)C语言的变量、常量及运算

一、学习目标 了解C语言变量的其它创建方式了解C语言常量了解C语言的运算符 目录 C语言真的很难吗&#xff1f;那是你没看这张图&#xff0c;化整为零轻松学习C语言。 第一篇&#xff1a;&#xff08;一&#xff09;脱离学习误区 第二篇&#xff1a;&#xff08;二&#xff…

实战使用Axure设计App,使用WebStorm开发(4) – 实现页面UI

系列文章 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求 实战使用Axure设计App,使用WebStorm开发(2) – 创建 Ionic 项目 实战使用Axure设计App,使用WebStorm开发(3) – 构建页面架构 实战使用Axure设计App,使用WebStorm开发(4) – 实现页面UI 实战使用Axu…

ArcGIS实验教程——实验二十:ArcGIS数字高程模型DEM建立

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 一、实验描述 本实验讲述DEM的创建方法和过程。DEM的采集方法有四种:地面测量、摄影测量、空间站、地形图数字化。 二、实验内容 1、插值法DEM建立 2、创建TIN 3、TIN转栅格 4、生成等高线 …

思科asa5515端口映射_Cisco ASA端口映射

SQL基础--同义词同义词的概念: 同义词是Oracle对象的别名,使用同义词访问相同的对象 可以为表.视图.存储过程.函数或另一同义词等对象创建同义词 方便访问其它用户的对象,隐藏了对象的身份 缩短对象名字的长度 同义 ...访问本地json文件因跨域导致的问题我使用jquery的getJSON的…

英文词频统计预备,组合数据类型练习

实例: 下载一首英文的歌词或文章&#xff0c;将所有,.&#xff1f;&#xff01;等替换为空格&#xff0c;将所有大写转换为小写&#xff0c;统计某几个单词出现的次数&#xff0c;分隔出一个一个的单词。2.列表实例&#xff1a;由字符串创建一个作业评分列表&#xff0c;做增删…

ArcGIS实验教程——实验二十一:DEM分析

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 一、实验描述 表面分析主要通过生成新数据集,如等值线、坡度、坡向、山体阴影等派生数据,获取更多的反应原始数据集中所暗含的空间特征、空间格局等信息。 二、实验内容 1、地形因子计算 2、填…

《零基础看得懂的C语言入门教程 》——(六)轻轻松松了解C语言的逻辑运算

一、学习目标 了解逻辑判断的概念了解if语句的使用方法了解switch语句的使用方法了解逻辑运算符的使用方法 目录 C语言真的很难吗&#xff1f;那是你没看这张图&#xff0c;化整为零轻松学习C语言。 第一篇&#xff1a;&#xff08;一&#xff09;脱离学习误区 第二篇&#…

.NET 6 在 Win7 系统证书链错误导致 HttpWebRequest 内存泄露

本文记录我将应用迁移到 dotnet 6 之后&#xff0c;在 Win7 系统上&#xff0c;因为使用 HttpWebRequest 访问一个本地服务&#xff0c;此本地服务开启 https 且证书链在此 Win7 系统上错误&#xff0c;导致应用内存泄露问题。本文记录此问题的原因以及调查过程核心原因核心原因…

个人成就故事

曾经参加过文艺演出&#xff0c;并且照片上过学校的文化墙。 中专时画的园林景观获过奖。 在麦当劳打工时参加过大型活动&#xff0c;并且担任小队副队长。 在学校坚持锻炼练出了一些腹肌转载于:https://www.cnblogs.com/mokutanuki/p/5486567.html

Linux下java -version版本不对

在服务器上更新了新的 jdk&#xff0c;也在 /etc/profile 中设置了新的 JAVA_HOME&#xff0c;并且 source /etc/profile 然后使用java -version 和 javac -version 发现版本还是老版本&#xff0c;死活没有使用我新指定的。 中间各种排查&#xff0c;这里就不废话了&#xff0…

JAVA-JSP内置对象

相关资料&#xff1a;《21天学通Java Web开发》 request 请求对象 类型javax.servlet.ServletRequest 作用域Requestresponse 响应对象 类型javax.servlet.SrvletResponse 作用域PagepageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域Pagesession 会话对象…