使用 FileMapping 传递 _EXCEPTION_POINTERS * 时遇到问题

2023-12-13

我想做一个进程外异常处理程序,并且创建了一个看门狗进程,当子进程引发异常时,它会进行专门的异常处理。我已经通过事件成功调用了看门狗进程。我面临的问题是在尝试将异常信息指针传递给其他进程时。

我降落在这里将指针传递给由 exec() 生成的进程并了解到在共享内存中传递指针存在以下问题:

“如果您使用共享内存,则无法传递指针。指针将包含虚拟地址,该虚拟地址因进程而异。您必须根据共享内存区域的起始位置交换偏移值。

如果不使用共享内存,则无法交换任何类型的指针:其他进程将无法访问您进程的内存。”

现在我该如何克服这个问题?

流程1:

    struct mytest
    {
      _EXCEPTION_POINTERS * except ;
      DWORD ThreadId ;
      DWORD ProcessId ;
    }

    OpenFileMapping ( ) ;

    void * pBuf = MapViewOfFile ( ) ;

    mytest passdata ;

    CopyMemory ( pBuf , &passdata , sizeof ( passdata ) ) ;

    UnMapView ( ) ;

    CloseHandle ( ) ;

(例如)流程2:

    cout << passdata->except->ExceptionRecord->ExceptionCode << endl ;

会崩溃的。我理解这是因为虚拟地址是特定于进程的。但在这种情况下如何将异常信息传递到不同的进程并编写小型转储?

P.S:我什至尝试单独传递 EXCEPTION_RECORD 结构,但不起作用。


我会将其放在一起作为答案,尽管它确实应该是对汉斯的回答(以及那里的评论)但似乎有必要进行一些解释:

问题中发布的代码正确传递了struct mytest结构到共享内存中。

第二个代码片段:

(例如)流程2:

cout << passdata->except->ExceptionRecord->ExceptionCode << endl ;

但显示了一个误解:虽然您可以读取指针的值passdata.except,在进程 2 中这只是一个任意的 32/64 位值,它不是一个有效的指针。

You can将此传递给MiniDumpWriteDump,该函数将在目标进程(proc 1)的上下文中评估该指针值。但是你cannot在过程 #2 中取消引用它。

汉斯的例子给出了解决方案,如果你需要的值ExeptionCode在进程 #2 中,那么您需要取消引用 proc#1 中的指针并将值放入写入共享内存的数据中。

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

使用 FileMapping 传递 _EXCEPTION_POINTERS * 时遇到问题 的相关文章

  • 打击垃圾邮件机器人

    我的网站中有 C 表单 希望防止垃圾邮件机器人填写它 诀窍是 我想避免 CAPTHA 或任何其他用户输入 以避免丢失单个注册 以下是我心中的一些技巧 隐藏输入栏 问题 这还有效吗 跟踪时间 从第一个用户输入 关注名字 到发布表单 人类需要
  • 仅使用扩展方法在 Linq 中进行漂亮、干净的交叉连接 [重复]

    这个问题在这里已经有答案了 可能的重复 使用扩展方法表示的嵌套 from LINQ 查询 https stackoverflow com questions 9115675 nested from linq query expressed
  • 运行 t4 脚本作为 resx 文件的自定义工具

    我有一个资源文件MyResource resx 我想改变MyResource Designer cs文件生成 我有一个 t4 脚本 它接受 resx 文件作为输入并给出结果转换 但是 我必须手动运行此 t4 才能使其工作 我看到 resx
  • 双线性序列给出奇数结果

    我试图让我的表现技能 不存在 达到标准 但在将公式写入代码时遇到了问题 这是我试图将其引用为 转换 为代码的公式 考虑一个序列 u 其中 u 定义如下 号码u 0 1是第一个u 对于每个x in u then y 2 x 1 and z 3
  • 如何动态加载包含非托管代码的原始程序集?(绕过“无法验证的代码失败策略检查”异常)

    我将举一个使用的例子系统 Data SQLite DLL http sqlite phxsoftware com 这是一个包含非托管代码的混合程序集 如果我执行这个 var assembly Assembly LoadFrom System
  • MySql 最后插入 ID,连接器 .net

    我正在使用 MySql Connector net 我需要获取最后一个查询生成的插入 id 现在 我假设返回值是MySqlHelper ExecuteNonQuery应该是最后一个插入id 但它只返回1 我正在使用的代码是 int inse
  • 使用 JSON 格式正确配置 NLog 到 IHostBuilder

    我有以下代码 应该接受 NLog 的 JSON appsettings 配置 然后使用它来创建 NLog LogFactory 这个 NLog 工厂应该被传递到 MyService 类中 以便在那里创建一个记录器 class Program
  • 在不使用 ncurses 的情况下用 C/C++ 编写“真正的”交互式终端程序,例如 vim、htop...

    不 我不想使用ncurses 因为我想了解如何 终端可以工作 并且我自己编程也很有趣 没有 必须是可移植的 它必须只能在基于 linux xterm 的终端仿真器上工作 我想做的是编写一个交互式终端应用程序 例如 htop 和 vim 我的
  • WinForms - 表单大小错误

    我们有以下代码 private void MainForm Shown object sender EventArgs e RepositionForm private void RepositionForm Rectangle rect
  • 如何强制用户仅使用“new”创建从我派生的类的对象?

    为了实现引用计数 我们使用IUnknown http msdn microsoft com en us library ms680509 VS 85 aspx类接口和智能指针模板类 该接口具有所有引用计数方法的实现 包括Release vo
  • 使用 INotifyPropertyChanged

    有人可以解释一下为什么在 wpf 中使用绑定时需要使用 INotifyPropertyChanged 的 实现吗 我可以在不实现此接口的情况下绑定属性吗 例如我有代码 public class StudentData INotifyProp
  • 带双重检查锁的单例设计模式

    假设您有以下代码 1 为什么我们使用双重检查锁 为什么单锁不够好 请提供详细的例子 2 这种实施方式的主要缺点是什么 我该如何证明呢 Thanks public sealed class SomeSingleton5 private sta
  • SQL参数化查询不显示结果

    我的 DataAcess 类中有以下函数 但它没有显示任何结果 我的代码如下 public List
  • 该组件没有由 uri 标识的资源

    我想创建一个通用数据网格以在我的所有视图 用户控件上使用 这是我的结构 Class Library called Core Class called ViewBase public class ViewBase UserControl pu
  • TreeView:仅在子节点中存在复选框

    我需要一个树视图控件 根节点没有复选框 只有图像 所有子节点都有一个复选框 图像 C net 2 0 winforms 不是 wpf WinForms树视图默认不支持混合复选框 非复选框节点 您可以在树视图上全局启用复选框 并使用以下命令在
  • EWS - 给予预约,获取预约的所有者副本

    在 EWS 中进行预约后 是否可以获得所有者的副本 例如 如果我登录为user1 我有user1创建的约会的副本user2 我有冒充权 我要编辑user2预约的副本 我怎样才能获得user2 s copy 您可以使用 PidLidClean
  • 字符串 c 的二叉树

    我正在尝试实现一个能够在 c 中保存字符串的二叉树 在让代码适用于整数之后 我尝试稍微修改它以处理字符数组 现在我似乎完全破解了代码 但不知道如何破解 任何帮助表示赞赏 include
  • 如何在给定点停止线程?

    我试图停止一些线程 阅读一些有关优雅地执行此操作的正确方法的内容 但我一定做错了什么 因为它根本不起作用 起初我尝试不使用lock with IsRunning不稳定 然后尝试使用锁 这是我所拥有的 private volatile boo
  • 如何在 Winform DataGridView 中创建不同的单元格格式

    我有一个 DataGridView 我将其绑定到 DataTable DataTable 是一个全数字值 要求 DataGridView 中的每 n 行都包含文本 而不是数值 以便在视觉上为用户分隔部分 我很高兴在绑定后将此文本数据放入 D
  • 如何从尖点库矩阵格式获取原始指针

    我需要从尖点库矩阵格式获取原始指针 例如 cusp coo matrix

随机推荐

  • C 3d 字符数组

    char monsternivel1 3 4 Rat Bat Spider Goblin Orc Drawf Dragon Lich Banshee Demon Hydra Giant Spider 它说 gt E Dungeon Craw
  • 从 JSON 输出中选择字段

    使用Python 我如何提取字段id到一个变量 基本上 我要改变这个 accountWide true criteria description some description id 7553 max 1 orderIndex 0 类似的
  • GORM:不可知地映射大文本字段数据库

    我有一个 Grails 应用程序 它将针对 SQL Server 或 Oracle 后端运行 我使用 GORM 作为 ORM 我想以支持两种数据库类型的方式映射大型文本字段 在我的 Grails 域类中 我有类似的内容 class Note
  • 如何将 python 模块从源安装到虚拟环境中

    据我了解 您可以使用 pip install e my module 从源安装模块 当我执行此操作时 pip show f my module grep 位置 给出 my module 作为位置 而不是我的虚拟环境的站点包 安装模块时我激活
  • Opencv检测不同时间拍摄的两张照片之间的变化

    我们有该商品的一张原始图片 照片 即雕塑 我们不时地为该物品拍摄新照片 照片始终与物品成 90 度相同角度拍摄 但 会有一些轻微的上下 左右移动 同一物体的不同长度 我们用线取 相机和在其前面移动的物体因此不时的速度 对象发生变化 因此最终
  • 从远程服务器拉取某个分支

    假设有人创建了一个分支xyz 如何拉动分支xyz从远程服务器 例如GitHub 并将其合并到现有分支中xyz在我的本地仓库中 答案是将分支推送到 Git给我错误 拒绝 并提到 非快进 但我收到错误 拒绝 以及有关 非快进 的信息 这是因为
  • 如何使用 Google Apps 脚本通过 for 循环将值添加到二维数组

    有人可以向我展示一些简单的示例 以使用 for 循环将值添加到二维数组吗 我完全错误的测试脚本如下 预期行为 整体值 0 0 0 整体值 0 1 1 整体值 0 2 2 整体值 1 0 0 整体值 1 1 1 整体值 1 2 2 funct
  • 使用 C#:如何使用 Newtonsoft.JSON 迭代嵌套 JSON?

    我正在提取大量项目的 JSON 数据 每个项目都有一组我想要抓取并放置在列表中的特定数据 以下是 JSON 数据中包含的 700 多个项目中的两个示例 我需要能够使用 Newtonsoft JSON 迭代 JSON 数据 并在 fieldN
  • 尝试将大 Excel 文件读入 DataTable 时出现 OutOfMemoryException

    我正在使用 SSIS 包清理 Xlsx 文件中的数据并将其加载到 SQL Server 表中 我还必须突出显示 Xlsx 文件中包含错误数据的单元格 为此我必须根据列名称和行 ID 我在数据电子表格中拥有 获取列和行索引 为此 我比较第一个
  • 数据库细化 - F 的最小覆盖(无关属性)

    模式 R A B C D E F FD F ABC gt D CD gt B BCF gt D CDF gt BE BCDF gt E 找到 Fc F 的最小覆盖 又名规范覆盖 这是我书中使用的方法 示例 abc gt xyz a 是冗余的
  • 无法在 Mac 上创建开发者证书

    这件事发生在一夜之间 昨天我能够处理我的 NET Core 应用程序 现在每次我尝试做一个dotnet run我在 cmd 行中收到以下错误 如您所见 我尝试运行建议的命令来创建开发人员证书 其中dotnet dev certs https
  • 如何在 Visual Basic 中使用 while 循环从 StreamReader 中读取数据?

    考虑 Dim line As String Using readFile As New StreamReader SalesUpdateFile While line readFile ReadLine IsNot Nothing 我是 V
  • 没有可行的从 std::function 到 bool 的转换

    C 11std function应该执行operator bool const 那么为什么 clang 告诉我没有可行的转换呢 include
  • R-向 PDF 添加页码

    我在向 PDF 添加页码时遇到问题 这是我插入页面 绘图的方法 pdf file pdfFilePath width 11 height 8 5 for grid newpage pushViewport viewport layout g
  • 从 Google 表格调用时 getOAuthToken 返回 null

    我正在研究一种方法 通过 oAuth 规范和 AWS API 网关调用来限制特定用户的某些 Google 表格 但我遇到了一个问题ScriptApp getOAuthToken 功能 当我使用 Google Apps 脚本调试器运行代码时
  • 动态背景(在 LinearLayout 上)-我的错误是什么?

    我有一个问题 我试图让我的应用程序背景根据计时器每十秒改变一次 我已经做了我能做的 但无法解决它 因为我是 java 和编程的初学者 我如果有人可以纠正我的代码 我会很高兴 我可以将它打包到手机等中 Eclipse不会显示错误 但当计时器开
  • 为什么Unity3D中相机绕z轴旋转?

    我有一个主摄像头在 Unity3D 中 我想根据鼠标输入进行旋转 因此它可以作为第一人称视频游戏 您可以根据要查看的位置移动鼠标 相机的起始值 Unity 中 检查器 选项卡中的 变换 选项卡 为 Position X 1 Y 1 Z 11
  • 将“facet_grid”从多面画布上拉开?

    考虑以下示例 ggplot2 facet grid p lt ggplot mpg aes displ cty geom point p facet grid vars drv vars cyl Which results in the f
  • Safari 应用扩展未安装

    仅供参考 我对 XCode 开发完全陌生 我有一个 Safari 应用程序扩展项目 如果我从 XCode 中运行它 它会将我的扩展添加到 Safari 中 如果我创建存档 导出并选择 导出开发签名应用程序 我可以获取生成的文件 将其安装在另
  • 使用 FileMapping 传递 _EXCEPTION_POINTERS * 时遇到问题

    我想做一个进程外异常处理程序 并且创建了一个看门狗进程 当子进程引发异常时 它会进行专门的异常处理 我已经通过事件成功调用了看门狗进程 我面临的问题是在尝试将异常信息指针传递给其他进程时 我降落在这里将指针传递给由 exec 生成的进程并了