先使用

JS_DecodeScript反编译jsc  得到AST树

AST树词法解析

http://esprima.org/

AST还原成源码: npm install escodegen

AST树遍历:npm install estraverse

 
 

https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Internals/Bytecode

从CompileScript函数中可以看出它的处理过程,

用 Parser<FullParseHandler> parse对象,将源代码进行翻译,将代码转成AST结构ParseNode
再将AST数据结构
经过BytecodeEmitter bce对象处理,变成字节码。 这个字节码是JSScript数据结构的一部分。 
注意:这个字节码是bce编译产生的存储在jsscript对象中,  最后一步是经过xdr数据处理,(调用的是JS_EncodeScript)存储在文件中了,也就是jsc文件的内容。
所以js解释器想运行jsc的代码,必须先JS_DecodeScript一下,然后才能运行。 
 
 
反编译的过程:
读取jsc文件,然后 用JS_DecodeScript函数 得到JScript 对象, 然后将JScript转成
BytecodeParser parser(cx, script);
 
 
ASTSerializer serialize;
serialize.setParser(&parser);
ParseNode *pn = parser.parse(nullptr);
if (!pn)
return false;
RootedValue val(cx);
if (!serialize.program(pn, &val)) {
args.rval().setNull();
return false;
}
 
 
 
 
 

jsc 解码窥探的更多相关文章

  1. linux字符串url编码与解码

    编码的两种方式 echo '手机' | tr -d '\n' | xxd -plain | sed 's/\(..\)/%\1/g' echo '手机' |tr -d '\n' |od -An -tx ...

  2. 窥探Vue.js 2.0

    title: 窥探Vue.js2.0 date: 2016-09-27 10:22:34 tags: vue category: 技术总结 --- 窥探Vue.js2.0 令人兴奋的Vue.js 2. ...

  3. URI编码解码和base64

    概述 对于uri的编解码,在js中有3对函数,分别是escape/unescape,encodeURI/decodeURI,encodeURIComponent/decodeURIComponent. ...

  4. FFmpeg学习2:解码数据结构及函数总结

    在上一篇文章中,对FFmpeg的视频解码过程做了一个总结.由于才接触FFmpeg,还是挺陌生的,这里就解码过程再做一个总结. 本文的总结分为以下两个部分: 数据读取,主要关注在解码过程中所用到的FFm ...

  5. Unicode转义(\uXXXX)的编码和解码

    在涉及Web前端开发时, 有时会遇到\uXXXX格式表示的字符, 其中XXXX是16进制数字的字符串表示形式, 在js中这个叫Unicode转义字符, 和\n \r同属于转义字符. 在其他语言中也有类 ...

  6. C# base 64图片编码解码

    使用WinForm实现了图片base64编码解码的 效果图: 示例base 64编码字符串: /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKD ...

  7. java编码原理,java编码和解码问题

    java的编码方式原理 java的JVM的缺省编码方式由系统的“本地语言环境”设置确定,和操作系统的类型无关 . 在JAVA源文件-->JAVAC-->Class-->Java--& ...

  8. [LeetCode] Decode String 解码字符串

    Given an encoded string, return it's decoded string. The encoding rule is: k[encoded_string], where ...

  9. [LeetCode] Encode and Decode Strings 加码解码字符串

    Design an algorithm to encode a list of strings to a string. The encoded string is then sent over th ...

随机推荐

  1. LeetCode: 575 Distribute Candies(easy)

    题目: Given an integer array with even length, where different numbers in this array represent differe ...

  2. 手把手教你使用ueditor

    ueditor的强大功能就不再一一叙述了,我们的目的就是通过使用php与html实现下面的效果 话不多说,上干货 前言:文件都是基于tp5的 1.引入富文本编辑器 将 ueditor 下的文件引入 1 ...

  3. 你了解SVN, CVS等版本控制器吗?

    版本控制器SVN, CVS是两种版本控制器, 需要配套相关的SVN, CVS服务器, SCM是xcode里面配置版本控制的地方, 版本控制的原理就是A和B同时开发一个项目, A写完当天的代码之后把代码 ...

  4. 利用Web服务生成产品编号 执行添加操作

    为什么我想要执行添加操作,却添加不成功,系统提示我comm.ExecuteNonQuery有错误 已找到原因 在 string strsql = "insert into tb_goods( ...

  5. 黑马方法引用学习 Stream流 函数式接口 Lambda表达式 方法引用

  6. F - Balanced Number

    #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> ...

  7. 利用apache限制IP并发数和下载流量控制

    一,为什么要对IP并发数,下载流量进行控制 说正题之前,先给大家讲个故事,那是在2007年,我进了一家公司,当时我们正在给达芙妮做电子商务网,www.idaphne.com.从三月份开始做的吧,九月份 ...

  8. 代码review

    对于代码review个人也有些小小的看法: 1.首先我觉得我们所有开发人员要弄明白 现在Code Review 的目的 ,凡事不弄明白目的,无法做好完成一件事情,个人觉得有以下一些目的: a)可以在项 ...

  9. 绘制复杂的原理图元件库用于cadence(二)

    绘制Xilinx XC7K325TFFG900 kintex-7 FPGA元件 1.在官网搜索“pin out”往下拉一下就能看见 2.点击进入选择相应型号 3.打开之后是类似txt格式的FFG900 ...

  10. ASP.Net MVC 控制@Html.DisplayFor日期显示格式

    在做一個舊表的查詢頁時,遇到一個問題: 字段在db里存儲的是DATETIME,但保存的值只有日期,沒有時間數據,比如2018/2/26 0:00:00,顯示出來比較難看, 當然也可以做一個ViewMo ...