`
philix
  • 浏览: 82076 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jruby 编译,再反编译+简单分析

    博客分类:
  • ruby
 
阅读更多

something.rb内容:

puts "中文";

试运行:

jruby something.rb

编译

jruby -S  jrubyc  something.rb 

 这样就得到了

somthing.class

 

用java来运行这个  .class文件

java -cp ./jruby.jar;.  something

 表现正常!

 

用jad 反编译这个something.class

d:\Files\jad\jad.exe  something.class

 生成了  something.jad ,这是一个.java源文件:

// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Source File Name:   something.rb

import org.jruby.Ruby;
import org.jruby.RubyInstanceConfig;
import org.jruby.ast.executable.AbstractScript;
import org.jruby.ast.executable.RuntimeCache;
import org.jruby.javasupport.util.RuntimeHelpers;
import org.jruby.runtime.*;
import org.jruby.runtime.builtin.IRubyObject;

public class something extends AbstractScript
{

    private static void setPosition(ThreadContext threadcontext, int i)
    {
        threadcontext.setFileAndLine("something.rb", i);
    }

    public something()
    {
        filename = "something.rb";
        super.runtimeCache = new RuntimeCache();
        initFromDescriptor("puts\uFFFFF\uFFFF\000\000\000\000\000\000\000\000\000\000\000\000\001\001");
        setEncoding(0, "ASCII-8BIT");
        setByteList(0, "\uFFD6\uFFD0\uFFCE\uFFC4", getEncoding0());
    }

    public static IRubyObject __file__(something something1, ThreadContext threadcontext, IRubyObject irubyobject, IRubyObject airubyobject[], Block block)
    {
        return something1.getCallSite0().call(threadcontext, irubyobject, irubyobject, something1.getString0(threadcontext.runtime, 64));
    }

    public IRubyObject __file__(ThreadContext threadcontext, IRubyObject irubyobject, IRubyObject airubyobject[], Block block)
    {
        return __file__(this, threadcontext, irubyobject, airubyobject, block);
    }

    public IRubyObject load(ThreadContext threadcontext, IRubyObject irubyobject, IRubyObject airubyobject[], Block block)
    {
        RuntimeHelpers.preLoad(threadcontext, ",0,0,-2");
        RuntimeHelpers.postLoad(threadcontext);
        return __file__(this, threadcontext, irubyobject, airubyobject, block);
        RuntimeHelpers.postLoad(threadcontext);
        throw ;
    }

    public static void main(String args[])
    {
        something something1;
        RubyInstanceConfig rubyinstanceconfig;
        something1 = new something();
        String s;
        something1.setFilename(s = something.getClassLoader().getResource("something.class").toString());
        rubyinstanceconfig = new RubyInstanceConfig();
        rubyinstanceconfig.setArgv(args);
        rubyinstanceconfig.setScriptFileName(s);
        Ruby ruby;
        something1.load((ruby = Ruby.newInstance(rubyinstanceconfig)).getCurrentContext(), ruby.getTopSelf(), IRubyObject.NULL_ARRAY, Block.NULL_BLOCK);
    }
}

 

 

可以看出来,即使编译成.class文件 ,依然是解释执行的. 

puts "中文" 代码源文件都还在里面, 只是中文被编译转义了.

 

 

关于创业的好书: Rework中文版.pdf

 ##

  • 大小: 10 KB
分享到:
评论

相关推荐

    深入JVM内核 - 原理、诊断与优化

    除了Java,如JRuby、Scala、Clojure等语言也运行在JVM平台。熟悉和掌握JVM平台有着重要的实用价值和意义。 在本课程中个,将详细介绍JVM的基本原理、组成以及工作方式,并配合实际案例,介绍相关的调优技巧。 课程...

    执行篇:解析JDK 7的动态类型语言支持

    `bin`目录则存放了编译后的 `.class` 文件,这些文件包含了使用invokedynamic指令编译的字节码,通过反编译工具如JAD或JD-GUI可以查看这些字节码,进一步理解invokedynamic的实际应用。 `src`目录下是源代码,这里...

    jdk-7u51-win64.zip

    - `javap`工具可以反编译字节码,查看其机器码级别的表示。 - `javaws`用于运行Java Web Start应用程序,提供一种无需安装即可运行的便捷方式。 总之,JDK 7u51是Java开发的重要工具,尤其对于Windows 64位系统...

    exe4j jdk1.7

    6. **安全特性**:提供反调试和反反编译选项,增强程序安全性。 7. **启动脚本定制**:允许用户编写自定义的启动脚本来实现特定的启动逻辑。 8. **用户界面**:exe4j提供了一个直观的图形用户界面,使得配置过程更为...

    jdk-7u3-windows-x64

    3. **动态语言支持**:添加了JSR 292,使得Java平台可以更好地支持其他动态类型语言,如Groovy和JRuby。 4. **Fork/Join框架**:用于并行处理的框架,提高了多核处理器上的性能。 5. **Strings in Switch**:在...

    java开源包8

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    JAVA上百实例源码以及开源项目源代码

    简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 ...

    java7环境合集.zip

    6. **动态类型语言支持**:通过JSR 292(Method Handles and Invokedynamic)支持更灵活的调用机制,为动态语言如Groovy和JRuby提供了便利。 这个"java7环境合集.zip"文件的下载和安装意味着你可以开始使用Java 7...

    Android_近百个项目的源代码

    26. **AndroidRuby**:Ruby语言在Android平台上的支持库,可能涉及到JRuby的集成和Ruby语法的编译执行。 27. **Android-N810**:针对Nokia N810设备的Android移植项目,涉及到硬件适配、驱动重写和系统层定制。 28...

    java开源包1

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包11

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包2

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包3

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包6

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包5

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包10

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包4

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包7

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包9

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包101

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

Global site tag (gtag.js) - Google Analytics