jsc 解码窥探

先使用 

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;
}
 
 
 
 
 

 

转载于:https://www.cnblogs.com/dzqdzq/p/10942510.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值