java异常 字节码,处理Java字节码中的Try / Catch异常? (“堆栈高度不一致”)

博客探讨了在Java字节码中实现错误处理的问题。作者遇到了堆栈高度不一致的错误,考虑使用异常处理机制来解决。文章提到了创建和抛出Exception实例,并对异常表的构建感到困惑,寻求使用Jasmin汇编器进行异常处理的示例。
摘要由CSDN通过智能技术生成

我试图在

java字节码中做一些错误处理.我首先尝试实现一些类似catch的子例程,在那里我将检查错误情况,并跳转到相应的子例程,有点像:

iconst_1

iconst_0

dup

ifeq calldiverr

goto enddivtest

calldiverr:

jsr divError

enddivtest:

idiv

...More instructions...

divError:

getstatic java/lang/System/out Ljava/io/PrintStream;

ldc "Oh dear you divided by 0!"

invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V

上面的问题是当我有多个指令跳转到这个子程序时,我在运行字节码时收到一条错误信息,说堆栈高度不一致.

也许使用例外是解决这个问题的最佳方法?

通过一些谷歌搜索,我发现你可以创建Exception类的实例,并用以下内容初始化它们:

new java/lang/Exception

dup

ldc "exception message!"

invokespecial java/lang/Exception/(Ljava/lang/String;)V

我还发现你可以用它们抛出它们,这似乎没问题.

然而令我感到困惑的是如何捕获异常.似乎有一个神奇的“异常表”将异常的抛出和捕获粘在一起,但我不知道如何从头开始编写字节码(以及使用Jasmin进行汇编)时定义其中一个.有人可以告诉我创建异常表的秘诀吗?并且可能给我一个与jasmin汇编的异常处理示例?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值