问题标签 [bytecode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1327 浏览

language-design - 设计简单编程语言的方法

在我不断努力满足我对更多编程知识的无尽渴望的过程中,我想出了尝试编写一种(至少目前是)简单的编程语言来编译成字节码的想法。问题是我不知道关于语言设计的第一件事。是否有人对构建解析器的方法以及每种语言应具有的基本功能有什么建议?对于语言设计,你会推荐什么读物?我应该拍摄多高的水平?希望能够包含一种允许以类似于 gcc 允许内联汇编程序的方式内联字节码的功能是不现实的吗?看到我主要用 C 和 Java 编写代码,哪个更适合编译器编写?

0 投票
6 回答
42374 浏览

emacs - 如何对 .emacs.d 目录中的所有内容进行字节编译?

我决定去看看 Emacs,我非常喜欢它。现在,我正在使用Emacs Starter Kit,它为 Emacs 的默认安装提供了更好的默认设置和一些不错的自定义。

我对其进行了一些定制,添加了一些东西,比如yasnippetcolor-themesunbound和其他东西。我已经建立了一个github 存储库,其中保存了所有自定义项,以便我可以从多个地方访问它们,或者以防万一出现问题并且我丢失了 .emacs.d 目录。

这一切都很好,但是有一个问题:Emacs 大约需要 1-2 秒才能加载。AFAIK 我可以使用 Mx 字节编译文件将单个 .el 文件编译为 .elc,它可以工作。但是有很多.el文件,不知道有没有办法用一个简单的命令什么的把它们全部编译,加快Emacs的加载速度。我的 Emacs 并不总是打开,我经常打开和关闭它,尤其是在我将它设置为 Total Commander 中编辑命令的默认编辑器以更快地习惯它之后(是的,这里是 windows xp)。

我的 Emacs 版本是 22.3。是的,没有任何自定义的默认 Emacs 安装会立即启动。

我不确定加载时首选哪个版本,.el 或编译的 .elc 顺便说一下 Oo

那么,是否有一个 elisp 命令或 Emacs 命令行开关来使 Emacs 对 .emacs.d 目录中的所有内容进行字节编译?

0 投票
2 回答
1535 浏览

actionscript-3 - 有哪些工具可用于编辑/创建 AVM2 字节码?

我想直接为 Flash 10 AVM2 生成一些字节码,即没有 AS3。生成 SWF 文件的汇编程序将是理想的。

这存在吗?如果没有,从汇编程序→ abc → SWF 获得的最简单方法是什么?

0 投票
1 回答
2812 浏览

java - 动态字节码检测 - 问题

我有一个我无法解决的问题。假设我们有以下两个类和一个继承关系:

我想检测其他代码,使其如下所示:

为了实现这个目标,我将我的实现基于java.lang.instrument包,使用带有我自己的类文件转换器的代理。该机制也称为动态字节码检测。

到目前为止小菜一碟。现在,我的测试方法执行以下操作:

代码:

由于检测包中的以下限制,这不起作用:调用时new B(),检测从类 B 开始,并在加载被操作类时以编译错误结束,因为超类 A 还没有 print() 方法!问题出现了,如果以及如何在 B 类之前触发 A 类的检测。我的 classfiletransformer 的 transform() 方法应该用 A 类显式调用!所以我开始阅读并遇到了这个:

java.lang.instrument.ClassFileTransformer.transform()javadoc 说:

每个新的类定义和每个类重新定义都会调用转换器。使用 ClassLoader.defineClass 请求新的类定义。使用 Instrumentation.redefineClasses 或其本机等效项提出类重定义请求。

transform 方法带有一个类加载器实例,所以我想,当 B 的检测开始时,为什么不自己用类 A调用该loadClass方法(loadClass调用)。defineClass我预计仪器方法会因此被调用,但遗憾的是事实并非如此。相反,该类A是在没有检测的情况下加载的。(尽管应该拦截加载过程,但代理不会拦截)

任何想法,如何解决这个问题?您是否看到一个原因,为什么操作某些字节码的代理无法手动加载另一个类,然后希望也可以通过该/任何代理发送?

请注意,由于在操作 B 之前已加载和检测 A,因此以下代码可以正常工作。

非常感谢!

0 投票
2 回答
2723 浏览

java - 用于方法进入/退出的 ASM 字节码检测

我创建了一个 JVMTI 代理,它在高级别执行以下操作:

  • onClassLoadHook 将加载类的字节码发送到一个单独的 Java 进程,该进程将使用 ASM 检测类

  • 取回字节码并加载它们

在我对加载的 Java 类进行检测的单独 Java 进程中,我执行以下操作:

......

当我尝试使用 Java Decompiler 反编译在此检测之后编写的类时 - 我看到以下我知道是错误的反编译函数:

因为我的函数实际上是这样的:

谁能告诉我我在这里做错了什么?我唯一的线索是,如果不是将 THIS 指针作为参数传递给我的函数,而是传入原始类型,那么一切都会顺利进行。我需要管理的 THIS 指针有什么特别之处吗?我已经比较了字节码,并使用了 ASMIFIER 来了解我需要使用哪些语句来生成正确的字节码。

0 投票
3 回答
2518 浏览

java - Java 字节码是否兼容不同版本的 Java?

如果我使用 Java 5 代码将应用程序编译为字节码,生成的 .class 文件是否能够在 Java 1.4 下运行?

如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Java 5 框架,那么我应该注意什么吗?

0 投票
4 回答
2803 浏览

python - exec() 字节码与任意本地人?

假设我要执行代码,例如

在我自己的命名空间内(所以结果本质上是mydict['value'] += 5)。有一个函数exec(),但我必须在那里传递一个字符串:

并将语句作为字符串传递似乎很奇怪(例如,它不是那样着色的)。可以这样做:

? 最后一行的明显候选者是exec(block.__code__, mydict),但没有运气:它提高UnboundLocalErrorvalue. 我相信它基本上是执行的block(),而不是块内的代码,所以分配并不容易——对吗?

当然,另一种可能的解决方案是拆卸block.__code__...

仅供参考,因为这个线程,我得到了这个问题。此外,这就是为什么一些(我不确定)需要新语法的原因


请注意这不会引发错误但也不会改变mydict

0 投票
3 回答
3321 浏览

java - Java 字节码可视化工具

什么可以帮助我用 Java 编写高度紧凑(最少字节码计数)的程序。
可能我在看:

  • 一个告诉我一个类或一个方法生成多少字节码的工具。
  • 可视化字节码。
  • 该工具可以告诉我哪些区域需要在字节码计数或 CPU 周期方面进行优化。
  • 字节码图表还有助于指示 Java 中存在哪些字节码及其各种属性。

任何现有的工具可以帮助我实现这一点?

0 投票
6 回答
1170 浏览

java - Java,最昂贵的语句?

Java 编程语言中最昂贵的语句(字节码和 CPU 周期)是什么?

0 投票
1 回答
816 浏览

java - 字节码检测生成 java 验证程序错误

我正在使用 ASM 来为 Java 程序进行字节码检测。我所做的很简单 - 在检测方法时,如果指令是 PUTFIELD,只需在指令之前执行 DUP_X1,然后访问 PUTFIELD 并使用包含 DUP 的堆栈条目的参数注入函数调用。

代码在检测之前和之后分别如下所示:

但是当我运行检测代码时,我得到:

java.lang.VerifyError:期望在堆栈上找到对象/数组

你能提供任何帮助吗?