jvm字节码中的栈映射表是什么?

2023-11-22

我正在学习用于生成字节码的 ASM 库。在某些时候,我犯了一些错误的局部变量类型并收到错误:

Exception in thread "main" java.lang.VerifyError: Bad local variable type
Exception Details:
  Location:
    Loops.start()V @56: aload_1
  Reason:
    Type top (current frame, locals[1]) is not assignable to reference type


  Stackmap Table:
    full_frame(@24,{Object[#2],Object[#9]},{Integer})
    full_frame(@25,{Object[#2],Object[#9]},{Integer,Integer})
    same_locals_1_stack_item_frame(@44,Integer)
    full_frame(@45,{Object[#2],Object[#9]},{Integer,Integer})
    full_frame(@48,{Object[#2]},{Integer})
    full_frame(@80,{Object[#2],Integer},{Integer})
    full_frame(@81,{Object[#2],Integer},{Integer,Integer})
    full_frame(@87,{Object[#2]},{Integer})
    full_frame(@119,{Object[#2],Integer},{Integer})
    full_frame(@120,{Object[#2],Integer},{Integer,Integer})
    same_locals_1_stack_item_frame(@123,Integer)

问题并不难找到和解决,但我很好奇这个堆栈映射表是什么?


StackMapTable是用 Java 6 或更高版本编译的类中的属性。 JVM 在执行过程中使用它通过类型检查进行验证.

基本上,堆栈映射框架定义了方法在执行期间的局部变量的预期类型和操作数堆栈(即框架的状态)。在运行时,JVM 会抛出VerifyError如果预期类型和实际类型不兼容。

为了节省空间,并不是每条指令都有对应的帧。该表仅定义潜在跳转目标或异常处理程序的框架。从这些框架可以很容易地推断出其他框架。您可以在上表中看到,仅为某些字节码偏移量定义了帧。

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

jvm字节码中的栈映射表是什么? 的相关文章

随机推荐

  • 比较 groovy 中的 null 和 number

    为什么 Groovy 中以下情况成立 0 gt null 是选择的结果还是compareTo 实现的结果 我正在使用 Groovy 2 0 5 在 Groovy 中null是最低可能的元素 所以一切都是 gt null assert tim
  • 使用 Cocoa-Touch 播放文档目录中下载的视频

    我试图让我的应用程序播放已下载到文档目录的视频文件 我知道该文件正在下载 但我似乎无法播放该文件 这是我的代码 IBAction play NSArray paths NSSearchPathForDirectoriesInDomains
  • 将多个字符串替换为多个其他字符串

    我正在尝试用多个其他单词替换字符串中的多个单词 该字符串是 我有一只猫 一只狗和一只山羊 然而 这不会产生 我有一只狗 一只山羊和一只猫 而是产生 我有一只猫 一只猫和一只猫 在JavaScript中是否可以同时用多个其他字符串替换多个字符
  • 在 C++ 中以相反的顺序打印我的链接列表

    所以我对 C 相当陌生 今天我决定坐下来了解链表是如何工作的 到目前为止 我玩得很开心 但是当我尝试以相反的顺序打印链接列表时遇到了问题 而不是颠倒链接列表的顺序 另外 我想在没有双链表的情况下执行此操作 include
  • 在SVN中共享文件

    我正在从 VSS 迁移到 SVN 但我不知道如何在 SVN 中共享文件 基本上我们在VSS中有以下结构 MOSS Components ComponentA bin ComponentB bin GAC Mirror GAC Mirror
  • 在单独的 NIB 文件中的多个视图之间共享 NSArrayController

    首先 一些背景知识 我正在尝试在 Cocoa 适用于 OS X 中实现主从接口 也就是说 我有一个窗口有两个NSTableView显示两种不同类型的对象 对于这个问题 假设它们是仓库和包 选择一个与我的实际问题类似的例子 在第一个表视图 在
  • Python列表中浮点数的总和

    我有浮点值s p list swn senti synsets a s p 0 pos score print s Output 0 0 0 0 1 0 0 0 0 25 0 25 然后我尝试 print sum s 这给出了错误 floa
  • 如何在 C# 中将流保存到文件?

    我有一个StreamReader我用流初始化的对象 现在我想将此流保存到磁盘 该流可能是 gif or jpg or pdf 现有代码 StreamReader sr new StreamReader myOtherObject Input
  • 如何使用 Emacs trapmp ssh 到远程主机并以另一个用户的身份临时编辑文件?

    multi 曾经为我工作 现在它消失了 我很沮丧 我想做的是 在我的梦想世界里 myuser remotehost sudo 另一个用户 some path to file 并进行 ido 模式工作 这里的关键是 myuser remote
  • React HTML 编辑器 (TinyMce)

    我正在寻找适用于 React 的 HTML 编辑器 但由于我没有找到任何可以正常工作的内容 我只需要格式化文本 h1 h2 h3 p 粗体和图像 in base64 最后我决定使用Tiny Mce 效果很好 但仅限于第一次打开页面时 如果我
  • Tkinter,将前景图像覆盖在具有透明度的背景图像之上

    我有 2 张 png 格式的图片 第二个图像是具有透明背景的形状 第一张图片 第二张图片 我无法在给定坐标 x y 处将第二个图像置于第一个图像之上 并且通过第二个图像的透明区域可以看到第一个图像 期望的结果 import Tkinter
  • 如何修复“画布:尝试使用回收位图错误”?

    我正在创建一个RecyclerView显示图片网格 当选择其中一个时 它应该打开一个带有过渡的新活动 我正在使用 Glide 库来加载图片 并且过渡看起来很糟糕 因为它会在新活动中重新加载图片 所以我必须将其保存在缓存中 然后将其用于转换
  • Vba检查单元格中是否部分粗体

    我正在从工作表中的文本列表生成 XML 但我不知道如何检查当前单元格中是否有粗体字 我需要做的是检查 A 列中的每个单元格 将文本读入字符串 如果我点击任何粗体单词 请添加 周围有标签 我知道您可以逐字符读取单元格内容 但不能读取其格式 任
  • 同时登录网站和 Chrome 扩展程序

    我们有文件共享服务 http ge tt 以及一些 Chrome 扩展 其中之一为 Gmail 添加了额外的功能 在此扩展中 我们要求用户先登录 Ge tt 然后才能使用该扩展 由于他们已经登录了 Ge tt 所以他们不必再次登录就太好了
  • 如何从 HTTP 请求中获取 MAC 地址?

    有人可以给我一些关于从 HTTP 请求中获取用户 MAC 地址的指示吗 用户将来自outside我的网络 这取决于您的网络设置 但可能不会 以下是对以太网和 IP 的简短回顾 MAC地址是网卡的唯一地址 它用于识别数据包属于该网段上的哪个用
  • Modelmapper:当源对象为空时如何应用自定义映射?

    假设我有课MySource public class MySource public String fieldA public String fieldB public MySource String A String B this fie
  • 如何在SQL Server中使用选择查询创建表?

    我尝试使用 SYS 查询创建 50 100 个表 SELECT windows release windows service pack level windows sku os language version FROM sys dm o
  • Windows 中的 Chrome 63 忽略 autocomplete="new-password"

    我的 asp net 站点中有以下测试页面
  • 如何使用 std::copy 读取任意数量的值?

    我正在尝试编写与此相反的操作 std ostream outs properly initialized of course std set
  • jvm字节码中的栈映射表是什么?

    我正在学习用于生成字节码的 ASM 库 在某些时候 我犯了一些错误的局部变量类型并收到错误 Exception in thread main java lang VerifyError Bad local variable type Exc