stack-frame相关内容

确定哪个代码行引发了异常

在 dotNet 中,一行抛出异常并被捕获,我如何确定哪个文件中的哪一行抛出了异常?看起来比较简单,但我想不通... 解决方案 只有在有可用的调试符号时才能这样做. catch(Exception ex) {//检查 ex.StackTrace 属性} 如果你想在 VS 中调试这样的情况,你最好只在 Exceptions 中勾选 Common Language Runtime Exce ..
发布时间:2022-01-22 12:33:34 C#/.NET

“进入"vs“推送ebp;移动 ebp,特别是;sub esp, imm"和“离开"vs "mov esp, ebp;弹出 ebp"

enter和 有什么区别 推送ebpmov ebp, esp子 esp, 嗯 说明?有性能差异吗?如果是这样,哪个更快,为什么编译器总是使用后者? 与 leave 和 类似 mov esp, ebp流行音乐 说明. 解决方案 存在性能差异,尤其是enter.在现代处理器上,这解码到大约 10 到 20 µops,而三个指令序列大约是 4 到 6,具体取决于架构.有关详细信 ..
发布时间:2022-01-22 12:04:30 其他开发

什么是堆栈图框

我最近一直在查看 Java 虚拟机规范(JVMS)试图更好地理解是什么让我的程序工作,但我发现了一个我不太明白的部分...... 4.7.4 部分描述StackMapTable 属性,在该部分中,文档详细介绍了堆栈映射框架.问题是它有点罗嗦,我最好通过例子来学习;不是通过阅读. 我知道第一个堆栈映射框架是从方法描述符派生的,但我不明白如何(这应该是解释 这里.)另外,我不完全理解堆栈映 ..
发布时间:2022-01-16 11:56:58 Java开发

用于 Web 应用程序的 GetEntryAssembly

Assembly.GetEntryAssembly() 不适用于网络应用程序. 但是...我真的需要这样的东西.我使用一些在网络和非网络应用程序中使用的深层嵌套代码. 我目前的解决方案是浏览 StackTrace 以找到第一个被调用的程序集. ///////适用于 Web 应用程序的“GetEntryAssembly"版本//////入口程序集,或 Web ..
发布时间:2021-12-26 14:25:21 C#/.NET

ESP 和 EBP 之间是什么?

是的,我确定这已经被隐含地回答了很多次,但我似乎无法完全理解. 如果您有一个 (x86) 堆栈跟踪(例如,在 WinDbg 中查看它),并且您查看寄存器,那么 EBP 和 ESP 值相隔 x 字节意味着什么? 链接: https://stackoverflow.com/a/3699916/321013 https://stackoverflow.com/a/2466587/32 ..
发布时间:2021-12-22 18:57:10 其他开发

什么是 ESP 和 EBP 寄存器?

我发现ESP寄存器是当前堆栈指针,EBP是当前堆栈帧的基指针.但是,我不明白这些定义(我刚刚开始学习如何在汇编程序中编码). 据我所知,ESP 指向堆栈本身,而 EBP 指向堆栈顶部的任何内容1.但这些只是我的猜测,它们很可能是不正确的.否则,下面这样的语句是什么意思? MOV EBP, ESP 脚注 1:编者注:是的,这是不正确的.在标准术语中,“栈顶"是 ESP 指向的地方,即使它是 ..
发布时间:2021-12-18 09:38:03 其他开发

C 中的函数 Prologue 和 Epilogue

我知道嵌套函数调用中的数据会进入堆栈.堆栈本身实现了一种分步方法,用于在函数被调用或返回时从堆栈中存储和检索数据.这些方法的名称最为人所知作为序言和结语. 我尝试搜索有关此主题的材料,但没有成功.你们知道关于函数序言和结语在 C 中通常如何工作的任何资源(站点、视频、文章)吗?或者如果你能解释一下会更好. P.S : 我只是想要一些大致的看法,不要太详细. 解决方案 有很多资源 ..
发布时间:2021-12-18 09:20:20 C/C++开发

“进入"与“push ebp;"mov ebp, esp;sub esp, imm"和“离开"与“mov esp,ebp;流行音乐"

enter 和 有什么区别 push ebpmov ebp, espsub esp, imm 说明?有性能差异吗?如果是这样,哪个更快?为什么编译器总是使用后者? 与leave 和 类似 mov esp, ebp流行音乐 说明. 解决方案 存在性能差异,尤其是对于enter.在现代处理器上,这解码为大约 10 到 20 µops,而三个指令序列大约为 4 到 6,具体取决 ..
发布时间:2021-12-18 08:55:38 其他开发

到底什么是基指针和堆栈指针?他们指的是什么?

使用来自维基百科的这个例子,其中 DrawSquare() 调用 DrawLine(), (请注意,此图底部的高地址和顶部的低地址.) 谁能解释一下在这种情况下ebp 和esp 是什么? 据我所知,堆栈指针总是指向堆栈的顶部,而基指针总是指向当前函数的开头?或者什么? 编辑:我的意思是在 Windows 程序的上下文中 edit2:eip 也是如何工作的? ed ..
发布时间:2021-12-18 08:40:13 其他开发

试图理解 gcc 选项 -fomit-frame-pointer

我要求 Google 给我 gcc 选项 -fomit-frame-pointer 的含义,它将我重定向到以下语句. -fomit-frame-pointer 不要将帧指针保存在不需要的函数的寄存器中.这避免了保存、设置和恢复帧指针的指令;它还为许多功能提供了一个额外的寄存器.这也使得在某些机器上无法进行调试. 根据我对每个函数的了解,会在进程内存的堆栈中创建一个激活记录,以保存 ..
发布时间:2021-12-08 11:48:51 其他开发

为什么 GCC 在 64 位上丢弃帧指针?

默认情况下在 64 位架构上丢弃帧指针的基本原理是什么?我很清楚它可以启用,但是为什么 GCC 在启用 32 位时首先禁用它?毕竟,64 位 CPU 比 32 位 CPU 拥有更多的寄存器. 编辑: 当使用更新的 GCC 版本时,看起来 x86 的帧指针也会被丢弃.来自手册: 从 GCC 4.6 版开始,32 位 Linux x86 和 32 位 Darwin x86 目标的默认 ..
发布时间:2021-11-25 05:53:21 C#

组装中的 EBP、ESP 和堆栈框架

我对以下代码中的 EBP、ESP 和堆栈帧有一些疑问. 为什么我们要从 esp 中减去 28?我们在 main 中有两个局部变量 x 和 y.那么为什么我们不减去 8? 难道我们不把值从右(或上)到左(或下)堆叠吗?那么为什么我们在 [eax+8] 上加 1 而不是 [eax+4]? func(int a, int b, int c){返回 a+b+c;}主要的(){int x, ..
发布时间:2021-06-07 18:41:16 其他开发

StackFrame不会获取所有帧

为了有效调试程序,我尝试编写获取异常的函数并通过电子邮件向我发送有关该异常的详细报告。 c#代码: 公共静态布尔SendExceptionMail(ex ex,string []邮件,字符串标题) { StringBuilder builder = new StringBuilder(); builder.Append(“ ”); var st = new S ..
发布时间:2020-10-19 06:41:11 C#/.NET

静态全局变量与全局变量C

我有下面的程序.如果我将变量a,b,c声明为静态全局变量,则会出现分段错误,但是如果我将其声明为非静态全局变量或作为局部变量,则不会出现分段错误.为什么会这样表现?我知道数据存储的量超过了变量,但是为什么当仅声明为静态时,它会产生段错误?是否将静态声明的变量存储在堆栈框架的某些不允许覆盖的不同部分中? 编辑:我知道strcpy不安全.但这不是我的问题.我想了解为什么一个溢出会产生段错误,为什 ..
发布时间:2020-07-09 22:13:11 其他开发

使用运行时库的Delphi 64位调试具有错误的堆栈帧活动

我遇到了Win64调试问题,好像我们在“丢失"调试信息.因此,我做了一些研究,然后重新创建了我的所有内容. dproj文件用于我们的旗舰产品.当我把“丢失的"蓝色球拿回来时,这很有帮助. 但是现在我遇到了一个新问题:在堆栈显示窗口中显示的(顶部)堆栈框架似乎是错误的,这导致局部变量未显示在局部变量窗格中,并且也没有在鼠标悬停时显示在一些变量之上.但是,当我选择正确的堆栈框架时,局部变量窗口不 ..
发布时间:2020-07-09 22:13:06 其他开发

从框架对象获取对执行堆栈上的功能对象的引用?

给出inspect.stack()的输出,是否可以从堆栈框架的任何位置获取函数对象并调用它们?如果可以,怎么办? (我已经知道如何获取函数的名称.) 这就是我要得到的:假设我是一个函数,而我正在尝试确定调用方是生成器还是常规函数?我需要在函数对象上调用inspect.isgeneratorfunction().您如何确定谁打给您的电话? inspect.stack(),对吧?因此,如果 ..
发布时间:2020-07-09 22:13:02 Python