展开操作期间遇到无效或未对齐的堆栈

2023-12-19

我有一个 64 位程序,可与 VirtualBox COM 接口配合使用并实现虚拟机的前端。最近我开始变得奇怪An invalid or unaligned stack was encountered during an unwind operation例外,我想至少了解其原因。据我了解,堆栈需要 16 字节对齐,因此,我认为未对齐的堆栈指针可能会导致此情况。但问题是,因为我的程序所做的只是使用以下方法实现几个 COM 接口STDMETHODATL 中的宏应该使用正确的调用约定,那么我怎么会弄乱堆栈呢?

以下是发生问题时的调用堆栈示例:

ntdll.dll!00007ffe679ac0b4() Unknown
ntdll.dll!00007ffe67913356() Unknown
msvcrt.dll!__longjmp_internal() Unknown
> VBoxREM.dll!000000006fb0f3c4() Unknown

我试图谷歌__longjmp_internal符号但没有找到任何有用的东西 - 它是否表明异常展开正在进行中?

欢迎任何有关如何调试此问题的指针或可能会扰乱堆栈对齐的评论,因为我知道在这种情况下,由于涉及 VirtualBox,因此不可能给出准确的解决方案。


我最近遇到了这个令人困惑的问题。

我知道它只是在我从静态 C/C++ 运行时切换到 DLL 版本后才开始发生,因此这可能意味着静态版本没有执行堆栈展开。

然后我跟踪了 longjmp() 的汇编代码,并注意到第一个条件分支之一位于 _JUMP_BUFFER.Frame 上。

如果是0,则恢复一堆寄存器并返回。

啊哈!所以这必定意味着如果 _JUMP_BUFFER.Frame = 0,则展开被禁用。我尝试了一下,确实,问题解决了。

然后,我尝试观察 setjmp()/longjmp() 对成功时的 Frame 应该是什么。我发现通常,frame = 堆栈指针,但是当展开失败时,frame != SP。所以我尝试将 Frame 设置为 SP,这也消除了异常。

我不知道为什么会这样。我知道在 SYSV x86-64 ABI 中,帧指针是可选的。也许 setjmp() 需要一个适当的帧指针但没有得到一个?

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

展开操作期间遇到无效或未对齐的堆栈 的相关文章

  • Qt - QProcess 不工作

    我尝试启动 Internet Explorer 所以我使用下面的代码 QProcess process new QProcess this QString temp C Program Files Internet Explorer iex
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • 如何在类文件中使用 Url.Action() ?

    如何在 MVC 项目的类文件中使用 Url Action Like namespace 3harf public class myFunction public static void CheckUserAdminPanelPermissi
  • MVC3中设置下拉列表中的所选项目

    我必须为视图中的下拉列表设置所选项目 但它不起作用 View div class editor label Html LabelFor model gt model Gender div div class editor field Htm
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 传递 constexpr 对象

    我决定给予新的C 14的定义constexpr旋转并充分利用它 我决定编写一个小的编译时字符串解析器 然而 我正在努力保持我的对象constexpr将其传递给函数时 考虑以下代码 include
  • 在 VS 中运行时如何查看 C# 控制台程序的输出?

    我刚刚编写了一个名为 helloworld 的聪明程序 它是一个 C NET 4 5 控制台应用程序 在扭曲的嵌套逻辑迷宫深处 使用了 Console WriteLine 当我在命令行运行它时 它会运行并且我会看到输出 我可以执行其他命令并
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 将 Word 转换为 PDF - 禁用“保存”对话框

    我有一个用 C 编写的 Word 到 PDF 转换器 除了一件事之外 它工作得很好 有时 在某些 Word 文件上 后台会出现一条消息保存源文件中的更改 gt 是 否 取消 但我没有对源文件进行任何更改 我只想从 Word 文件创建 PDF
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person
  • 如何在 sql azure 上运行 aspnet_regsql? [复制]

    这个问题在这里已经有答案了 可能的重复 将 ASP NET 成员资格数据库迁移到 SQL Azure https stackoverflow com questions 10140774 migrating asp net membersh
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include

随机推荐

  • 具有接口属性的 C# 接口实现

    我开始更深入地研究 C 编程 并且一直在研究接口 我了解接口的基础知识 因为它们应该是实现它们的任何类的 契约 接口中定义的任何内容都需要在继承 不确定这是否是正确的术语 它们的任何类中实现 因此 我向接口添加了一个属性 该属性本身就是一个
  • Android:ProgressDialog 不显示

    我正在尝试为Android应用程序创建一个ProgressDialog 只是一个简单的向用户显示正在发生的事情 没有按钮或任何东西 但我无法做到正确 我已经浏览过论坛和教程以及 SDK 附带的示例代码 但无济于事 这就是我得到的 btnSu
  • 如何将 UITextView 中的文本设置为 URL 的链接

    我在 UITextView 中有一些文本 我希望将其显示为蓝色 并用作网站的链接 我如何在界面生成器中做到这一点 在 Interface Builder 中 选择 UITextView 打开检查器 转到 文本视图属性 选项卡 然后选中共享
  • 如何在 JavaScript 中用双引号替换单引号?

    以下代码仅替换一个单引号 var a column1 value0 column2 value1 column3 value2 var b a replace console log b var a column1 value0 colum
  • 如何让 html 滚动条从底部开始?

    我正在尝试为聊天框创建一个可滚动区域 但我的滚动条从顶部而不是底部开始 这意味着您会看到所有第一条消息 但在向下滚动之前不会看到所有新消息 该聊天框将收到大量消息 因此该栏需要从底部开始 这是我到目前为止在 JQuery 中得到的 但它不起
  • 使用自定义验证的文件扩展名验证会创建重复且无效的 data-* 属性

    This question raises after what I ve tried from the answer mentioned in my previous question https stackoverflow com que
  • 在 AndroidX 中支持深色和浅色主题 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我目前使用以下父主题Theme MaterialComponents Light NoActionBa
  • eslint“解析错误:JSX 中出现意外的标记 {”

    const title My Minimal React Webpack Babel Setups const App gt div b title b img src img div 这段代码出现错误 ESLint 解析错误 意外的标记
  • CORS 适用于访问令牌,但不适用于 Web Api 2 中的刷新令牌

    我有一个 Web api 2 应用程序 我使用 angularjs 客户端调用它 Web API 应用程序能够发出访问令牌和刷新令牌以进行身份 验证 在 GrantResourceOwnersCredentials 方法中包含以下几行 CO
  • @ddt 可以与 py.test 一起使用吗?

    ddt 是否与 py test 一起使用还是必须使用 unittest 格式 我有一个测试 其中设置夹具位于 conftest py 文件中 当我运行测试时 它出错了 因为它没有运行设置夹具 例如 ddt class Test search
  • 如何使用 gtags -v 创建索引但跳过某些子目录

    我正在尝试运行 gtags v 来为我的大型代码库构建索引 从这个链接 Emacs 作为大型 C 项目的 IDE https stackoverflow com questions 15282233 emacs as an ide for
  • 从设置包中获取(默认)值

    我有一个IOS5项目 我已向我的项目添加了一个设置包 并向其中添加了一些设置 我设置 host ip 的属性
  • 如何在 Swift 中从图像数组中释放图像

    是否有一个 核选项 可以从图像阵列中释放图像 我想播放第一个动画1 ImageSet1 然后在完成块中删除该动画 然后加载并播放第二个动画2 ImageSet2 依此类推 清洗 冲洗 重复 你明白了 首先 我定义 ViewControlle
  • 从任务管理器关闭应用程序后,广播接收器无法在棒棒糖中工作

    这是广播接收器 这段代码在 kitkat 和 jeallyBean 中运行 在此我们简单地接收传入消息的通知 当手机收到任何消息时 它会显示通知 public class IncomingSms extends BroadcastRecei
  • 未捕获的语法错误:意外的标记 < 在 Chrome 上

    我知道这个问题已被问过很多次 但我找不到与我的问题相似的地方 我只在 Chrome 中收到此错误 在其他所有浏览器中一切正常 我在几个地方使用 JSON 返回数据 但由于我的代码可以在其他浏览器中运行 所以我认为它没有任何问题 Chrome
  • D3 有向图

    我使用以下示例来生成有向图 http bl ocks org 1153292 http bl ocks org 1153292 我想添加一个点击事件 以便当用户点击某个节点时 显示该节点的标题 到目前为止我做了这个 var circle s
  • DbContext 与 DataContext 相同吗?

    我正在遵循一个教程Scott Gu http weblogs asp net scottgu archive 2010 07 16 code first development with entity framework 4 aspx它引用
  • 如何使用redux-persist同时持久化localStorage和sessionStorage?

    我正在使用以下方式实现登录表单react redux and redux persist 后端团队已准备好登录 API 该表单有一个 记住我 复选框 我想保留登录响应中的 JWT 身份验证令牌 我认为实现 记住我 的正确方法是 如果未选中
  • AS3 中的全局变量

    好的 我希望能够从 Flash 文件或由该 Flash 文件加载的 Flash 文件中的任何位置访问某些变量 我该怎么做 我不知道类是什么 我不想了解类是什么 我不想导入任何东西 我只是希望能够从任何地方初始化和访问某些变量 谢谢 好吧 不
  • 展开操作期间遇到无效或未对齐的堆栈

    我有一个 64 位程序 可与 VirtualBox COM 接口配合使用并实现虚拟机的前端 最近我开始变得奇怪An invalid or unaligned stack was encountered during an unwind op