`
skandhas
  • 浏览: 35791 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Ruby1.9的隐藏参数"--dump"

    博客分类:
  • Ruby
阅读更多

前几天,我的同事老高在看Ruby1.9.2源码的时候,发现Ruby1.9有一个隐藏参数:"--dump"(注意是两个减号). 下面具体说说这个参数:

 

1. --dump 参数

--dump 可以打印出ruby及指定脚本的相关信息,具体如下:

[version, copyright, usage, yydebug, syntax, parsetree , parsetree_with_comment, insns ]

其中有几项的内容我们已经熟悉,例如:version,copyright,usage. 不过这次我们感兴趣的是parsetree和insns的内容。

 

parsetree -- 打印指定脚本的Parse Tree

insns        -- 打印指定脚本的RubyVM(YARV)指令

 

2. 具体用法举例

假设有一个已经写好的脚本1.rb,存放在C盘。我们可以如下使用"--dump"参数:

ruby --dump parsetree c:\1.rb

 

3.测试结果

测试脚本:

class A
  def hello
    puts 'Hello'
  end
end

A.new.hello

打印RubyVM指令:ruby --dump insns c:\1.rb

输出

== disasm: <RubyVM::InstructionSequence:<main>@c:/1.rb>=================
0000 trace            1                                               (   1)
0002 putspecialobject 3
0004 putnil
0005 defineclass      :A, <class:A>, 0
0009 pop
0010 trace            1                                               (   7)
0012 getinlinecache   19, <ic:0>
0015 getconstant      :A
0017 setinlinecache   <ic:0>
0019 send             :new, 0, nil, 0, <ic:1>
0025 send             :hello, 0, nil, 0, <ic:2>
0031 leave
== disasm: <RubyVM::InstructionSequence:<class:A>@c:/1.rb>==============
0000 trace            2                                               (   1)
0002 trace            1                                               (   2)
0004 putspecialobject 1
0006 putspecialobject 2
0008 putobject        :hello
0010 putiseq          hello
0012 send             :"core#define_method", 3, nil, 0, <ic:0>
0018 trace            4                                               (   5)
0020 leave                                                            (   2)
== disasm: <RubyVM::InstructionSequence:hello@c:/1.rb>==================
0000 trace            8                                               (   2)
0002 trace            1                                               (   3)
0004 putnil
0005 putstring        "Hello"
0007 send             :puts, 1, nil, 8, <ic:0>
0013 trace            16                                              (   4)
0015 leave                                                            (   3)
 

 

打印ParseTree:ruby --dump parsetree c:\1.rb

输出:

###########################################################
## Do NOT use this node dump for any purpose other than  ##
## debug and research.  Compatibility is not guaranteed. ##
###########################################################

# @ NODE_SCOPE (line: 7)
# +- nd_tbl: (empty)
# +- nd_args:
# |   (null node)
# +- nd_body:
#     @ NODE_BLOCK (line: 1)
#     +- nd_head:
#     |   @ NODE_CLASS (line: 1)
#     |   +- nd_cpath:
#     |   |   @ NODE_COLON2 (line: 1)
#     |   |   +- nd_mid: :A
#     |   |   +- nd_head:
#     |   |       (null node)
#     |   +- nd_super:
#     |   |   (null node)
#     |   +- nd_body:
#     |       @ NODE_SCOPE (line: 5)
#     |       +- nd_tbl: (empty)
#     |       +- nd_args:
#     |       |   (null node)
#     |       +- nd_body:
#     |           @ NODE_DEFN (line: 2)
#     |           +- nd_mid: :hello
#     |           +- nd_defn:
#     |               @ NODE_SCOPE (line: 4)
#     |               +- nd_tbl: (empty)
#     |               +- nd_args:
#     |               |   @ NODE_ARGS (line: 2)
#     |               |   +- nd_frml: 0
#     |               |   +- nd_next:
#     |               |   |   @ NODE_ARGS_AUX (line: 2)
#     |               |   |   +- nd_rest: (null)
#     |               |   |   +- nd_body: (null)
#     |               |   |   +- nd_next:
#     |               |   |       (null node)
#     |               |   +- nd_opt:
#     |               |       (null node)
#     |               +- nd_body:
#     |                   @ NODE_FCALL (line: 3)
#     |                   +- nd_mid: :puts
#     |                   +- nd_args:
#     |                       @ NODE_ARRAY (line: 3)
#     |                       +- nd_alen: 1
#     |                       +- nd_head:
#     |                       |   @ NODE_STR (line: 3)
#     |                       |   +- nd_lit: "Hello"
#     |                       +- nd_next:
#     |                           (null node)
#     +- nd_next:
#         @ NODE_BLOCK (line: 7)
#         +- nd_head:
#         |   @ NODE_CALL (line: 7)
#         |   +- nd_mid: :hello
#         |   +- nd_recv:
#         |   |   @ NODE_CALL (line: 7)
#         |   |   +- nd_mid: :new
#         |   |   +- nd_recv:
#         |   |   |   @ NODE_CONST (line: 7)
#         |   |   |   +- nd_vid: :A
#         |   |   +- nd_args:
#         |   |       (null node)
#         |   +- nd_args:
#         |       (null node)
#         +- nd_next:
#             (null node)
 
1
1
分享到:
评论

相关推荐

    class-dump, class-dump-z.exe,class-dump-z win版本

    class-dump, class-dump-z.exe,class-dump-z win版本

    class-dump-z全平台版本(linux、iPhone、Windows)

    《class-dump-z:全平台神器,探索iOS与跨平台逆向工程的得力助手》 在IT行业中,尤其是在移动应用开发和安全分析领域,逆向工程是一项至关重要的技能。它可以帮助开发者理解软件的工作原理,查找漏洞,或者优化...

    class-dump-z

    而class-dump-z是class-dump的一个增强版本,它不仅保留了原版的功能,还增加了一些特色特性,如支持ARM64架构,以及更友好的命令行参数等。 使用class-dump-z,开发者可以快速获取到iOS应用中的类定义、方法列表、...

    class-dump-3.5

    《class-dump-3.5:深入探索Objective-C类信息》 在iOS和macOS的开发中,Objective-C作为主要的编程语言之一,其强大的动态性使得开发者能够灵活地处理类和对象。然而,这种灵活性有时也会带来调试的挑战。这时,一...

    class-dump-z_0.2-0

    《class-dump-z_0.2-0:iOS头文件反编译利器详解》 在iOS开发领域,class-dump-z是一款备受瞩目的工具,它作为class-dump的变种,为开发者提供了强大的头文件反编译功能。本文将深入探讨class-dump-z的核心特性、...

    Redis-dump安装.rar

    本教程将详细介绍如何在Windows环境下使用msys2和ruby进行Redis-dump的安装。 首先,我们需要了解msys2。msys2是一个轻量级的Unix-like环境,它为Windows平台提供了GCC编译器、Git等工具,方便开发者进行开源软件的...

    elasticsearch-dump-6.79.0.tar.gz

    1. **命令行参数**:elasticsearch-dump 提供了丰富的命令行选项,如 `--input-uri` 指定数据源,`--output-uri` 定义目标位置,`--type` 分别可以设置为 `dump` (导出) 或 `restore` (导入)。 2. **数据格式**:...

    elasticsearch-dump-6.78.0.tar.gz

    "elasticsearch-dump-6.78.0.tar.gz" 文件是一个包含 Elasticsearch-dump 工具的归档包,版本号为 6.78.0,通过解压可以获得该工具的执行文件和其他相关资源。 Elasticsearch 是一个基于 Lucene 的分布式、RESTful ...

    class-dump-z.zip

    《class-dump-z:iOS与Mac开发中的反编译利器》 在iOS和Mac应用程序的开发与逆向工程中,class-dump-z是一款至关重要的工具。这个名为"class-dump-z.zip"的压缩包包含了适用于Windows、Linux、Mac以及iPhone等多种...

    redis中使用redis-dump导出、导入、还原数据实例

    首先,要安装`redis-dump`,你需要确保系统已经安装了Ruby环境,包括`ruby`、`rubygems`和`ruby-devel`。在Linux环境下,你可以通过以下命令进行安装: ```bash [root@localhost tank]# yum install ruby rubygems ...

    parallel-fastq-dump:并行fastq-dump包装器

    并行fastq转储并行fastq-dump包装器为什么和如何即使您已经拥有更快的资源(网络,IO,CPU),即使您已经下载了sra文件,NCBI ... 所有其他参数将直接传递给fastq-dump ,-- --gzip ,-- --split-files和过滤器按预

    linux-ramdump-parser-v2.tar.gz

    2. 到linux-ramdump-parser-v2下 3. sudo ./ramdump-parser.sh Port_COM4 // Port_COM4中包含ramdump对应的vmlinux 4. 会生成out目录,在使用中,如果遇到问题,可以看out/dmesg_TZ.txt来看看log信息

    elasticsearch-dump-6.76.0.tar.gz

    在描述中提到的 "elasticsearch-dump-6.76.0.tar.gz" 是该工具的一个特定版本,其中 "6.76.0" 表示的是 Elasticsearch-dump 的版本号,这与 Elasticsearch 的某个兼容版本相对应。".tar.gz" 文件是一种常见的压缩...

    class-dump-z_0.2-0.tar.gz

    包括了class-dump的mac版,LINUX版,Windows版 具体用法: class-dump -H Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.1.sdk/System/Library/CoreServices/SpringBoard.app/...

    redis-dump-master.zip

    "redis-dump-master.zip" 是一个专门针对Redis数据库的备份工具,它能够帮助用户将Redis中的数据导出为JSON格式的文件,便于数据迁移、备份或者恢复。 在IT行业中,数据安全性和可恢复性是至关重要的。Redis-dump...

    frida-ios-dump-master.zip

    frida-ios-dump-master.zip

    class-dump ios9

    解决ios sdk9 无法class-dump导出framework头文件 也可以自己重新编译一份https://github.com/nygard/class-dump

    class-dump-3.5包

    《iOS逆向工程:利用class-dump-3.5获取私有API》 在iOS开发领域,有时我们可能需要深入探究应用内部的工作机制,或者为了安全测试,这涉及到逆向工程。class-dump-3.5是一款强大的逆向工具,它能够帮助开发者或...

    class-dump-z_0.2-0.tar

    (看到一哥们下载要5分。...class-dump -H Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.1.sdk/System/Library/CoreServices/SpringBoard.app/SpringBoard -o ~/Desktop/SpringBoard

Global site tag (gtag.js) - Google Analytics