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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM