使用 MDbgEng 从内存中读取对象

2023-11-30

我想帮忙@mark在问他在哪里的问题上请求 API 从 .NET 故障转储文件中转储许多对象.

所以我使用以下代码编写了mdbgeng,但不幸的是它失败了NotImplementedException当尝试枚举内存中的对象时。

using System;
using System.Runtime.InteropServices;
using Microsoft.Samples.Debugging.CorDebug;
using Microsoft.Samples.Debugging.CorDebug.Utility;
using Microsoft.Samples.Debugging.MdbgEngine;
using Microsoft.Samples.Debugging.Native;

namespace DumpHeapFromDotNet
{
    class Program
    {
        static void Main(string[] args)
        {
            var libraryProvider =  new LibraryProvider();
            var dumpReader = new DumpReader(args[0]);
            var dataTarget = new DumpDataTarget(dumpReader);
            foreach (var module in dumpReader.EnumerateModules())
            {
                var clrDebugging = new CLRDebugging();
                Version actualVersion;
                ClrDebuggingProcessFlags flags;
                CorProcess proc;
                var hr = (HResult) clrDebugging.TryOpenVirtualProcess(module.BaseAddress, dataTarget, libraryProvider,
                    new Version(4, 6, int.MaxValue, int.MaxValue), out actualVersion, out flags, out proc);

                if (hr < 0)
                {
                    switch (hr)
                    {
                        case HResult.CORDBG_E_NOT_CLR:
                            Console.WriteLine(module.FullName + " is not a .NET module");
                            break;
                        case HResult.CORDBG_E_LIBRARY_PROVIDER_ERROR:
                            Console.WriteLine(module.FullName + " could not provide library");
                            break;
                        case HResult.CORDBG_E_UNSUPPORTED_DEBUGGING_MODEL:
                        case HResult.CORDBG_E_UNSUPPORTED_FORWARD_COMPAT:
                            break;
                        default:
                            Marshal.ThrowExceptionForHR((int)hr);
                            break;
                    }
                }
                else
                {
                    var objects = proc.Objects; // NotImplementedException
                    foreach (CorObjectValue o in objects)
                    {
                        // TODO: Write details of object to file here
                    }
                }
            }
            Console.ReadLine();
        }
    }
}

我使用的转储是具有完整内存的 .NET 4.6.1076.0 转储(您可以传递文件名作为参数):

0:000> lm vm clr
[...]
ProductVersion:   4.6.1076.0
FileVersion:      4.6.1076.0 built by: NETFXREL3STAGE

0:000> .dumpdebug
----- User Mini Dump Analysis

MINIDUMP_HEADER:
Version         A793 (61B1)
NumberOfStreams 11
Flags           1806
                0002 MiniDumpWithFullMemory
                0004 MiniDumpWithHandleData
                0800 MiniDumpWithFullMemoryInfo
                1000 MiniDumpWithThreadInfo

我怀疑这与失踪有关mscordacwks或类似的,因为我刚刚在同一台计算机上使用与此示例相同的 .NET 框架创建了转储。

是真的还没有实现,还是我做错了什么?


我目前正在搞乱 MDBG,我尝试检查真实应用程序中所描述的行为,而不是转储上的行为。我收到了完全相同的未实现异常。在 MSDN 上查找文档我发现了确认,这方法没有实现.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MDbgEng 从内存中读取对象 的相关文章

随机推荐

  • 在运行时检查 Python 模块版本

    许多第三方 Python 模块都有一个属性 用于保存模块的版本信息 通常类似于module VERSION or module version 但有些则不然 此类模块的具体示例是 libxslt 和 libxml2 我需要检查运行时是否使用
  • 为什么这个 BASH 数组没有构建?

    为什么这个 bash 数组没有填充 我相信我过去也这样做过 回声 XECOMMAND 显示无数据 DIR 1 TEMPFILE tmp dir tmp ls l DIR tail n 2 sed s s g cut d f5 9 gt TE
  • 为什么这个嵌套的 content_tag 无法正确呈现?

    我的助手中有这个 def favorites count node content tag span class card favorite count do content tag i class icon heart node cach
  • 如何有选择地更新 wpf 中的模型

    当单击 listviewitem 时 我会在列表视图中显示模型列表 我打开一个绑定到 listviewitem 数据模型的对话框 并允许用户编辑各种属性 我正在尝试弄清楚如何处理 确定 和 取消 按钮 一方面 如果我将对话框直接绑定到列表视
  • Xcode单一窗口,显示来自xib文件的自定义视图

    我正在创建一个 OSX 应用程序 它有一个窗口 该窗口包含一个视图 在整个使用过程中呈现不同的视图 我目前的做法 在默认的 MainMenu xib 中 我在默认生成的窗口 这是我将使用的窗口 中为自定义视图创建了一个出口 我们就这样称呼它
  • 我可以用 C++ 扩展 lisp 吗?

    我可以从用 c 或 c 编写的库中调用 lisp 函数吗 我怎样才能扩展 lisp 当您想要执行一些系统调用或类似的操作时 这非常有用 从 lisp 调用非 lisp 代码的情况很少见 而且很少有必要 CLX CL 的 X11 客户端实现
  • 在 Swift 中,可以使用字符串来访问结构体属性吗?

    我有一个结构 我想知道是否可以使用括号语法访问变量 这是我的结构 import UIKit public struct Pixel public var value UInt32 public var red UInt8 public va
  • Objective-C 解密 AES 128 cbc 十六进制字符串

    我正在使用 Xcode 3 1 在 Snow Leopard 上为 iPhone 开发一个应用程序 该应用程序从 Restful Web 服务接收使用 AES 128 位 CBC 算法的十六进制格式的加密文本 该算法使用初始化向量 密钥 我
  • Android,从元素中删除边距和填充

    我有一个包含 LinearLayout 水平 的活动 我希望 LinearLyout 内的所有元素都被附加 没有边距或填充 我尝试了很多方法但没有效果 这是我最后一次尝试
  • IE8 返回“预期对象”[].slice.call [重复]

    这个问题在这里已经有答案了 我是 js 新手 这段代码适用于除 li 元素 选项卡 之外的所有浏览器 function slice call document querySelectorAll tabs forEach function e
  • 在 Windows 命令行上设置应用程序的窗口位置

    我有一个从桌面位置 0x0 开始的应用程序 我想在桌面中央打开它 我不想打开它并使用移动命令将其移动到中心 而是我的应用程序应该立即在中心位置启动 有什么方法可以通过命令提示符执行此操作吗 您将需要一个额外的实用程序 例如cmdow exe
  • 父节点移动时子节点不移动?

    我的世界有三个节点 玩家和 玩家视野 世界和视觉 SKShapeNodes 和我的玩家都使用 SKShapeNode 的自定义子类 当我移动世界时 所有玩家都会随之移动 但是当我移动玩家时 视觉节点保持固定在其位置 这可能是什么原因 这是我
  • 使用 Proxy 对象检测 Javascript 数组中的更改

    在 Javascript 中观察数组的变化相对简单 我使用的一种方法是这样的 subscribe to add update delete and splice changes Array observe viewHelpFiles fun
  • 失败后重新启动 Promise

    我使用 Nodejs 和 Q 来运行一系列异步函数 如果一个函数失败 我想运行另一个函数 然后再次启动该序列 这是原样 var promise database getUserCookies user then function data
  • F#、FParsec 和更新用户状态

    好吧 自从我的最后一个问题没有引起任何反应 我正在朝不同的方向前进 哈哈 我找不到任何超出的例子官方文档管理用户状态或访问先前解析器的结果 注意 这段代码的作用是not编译 namespace MultipartMIMEParser ope
  • Matplotlib:3D trisurf 图中的 ax.format_coord() - 返回 (x,y,z) 而不是(方位角,仰角)?

    我试图重做这个已经回答的问题Matplotlib plot surface 获取写在右下角的 x y z 值 但无法获得相同的结果 如所述 所以 我有这样的代码 import numpy as np from mpl toolkits mp
  • maven 抛出 ArrayOutOfBoundsException

    我在 macOS Sierra 上使用 apache maven 3 5 0 和 Java 版本 1 7 0 80 编写了一个示例maven pom xml文件 如下
  • Javascript画布,在错误的坐标处绘制

    我正在我的 mousePos 标题中正确读取和打印鼠标坐标但是当我在画布上绘制时 使用相同的精确坐标 通过单击和拖动 我正在绘制到底部和右侧 我可以通过不使用 style canvas width 512px 来解决此问题 但随后我无法设置
  • 在多列中搜索多个项目

    我在表单中有 6 个选择项目 我想在 MYSQL DB 中搜索这 6 个 如果我只使用一个 我就可以检索结果 例如 result mysql query SELECT FROM wsinmuebles WHERE Property Type
  • 使用 MDbgEng 从内存中读取对象

    我想帮忙 mark在问他在哪里的问题上请求 API 从 NET 故障转储文件中转储许多对象 所以我使用以下代码编写了mdbgeng 但不幸的是它失败了NotImplementedException当尝试枚举内存中的对象时 using Sys