Greifen Sie auf den Abstract Syntax Tree der V8 Engine zu

8

Ist es möglich, für einen bestimmten JavaScript-Code auf den AST der v8-Engine zuzugreifen? Ich arbeite an einem JavaScript Static Analyzer mit V8-Engine.

    
Cookies 26.02.2012, 06:24
quelle

3 Antworten

10

Das ist ziemlich alt, aber vielleicht hilft die Antwort jemandem dabei zu stolpern. Die Antwort ist ja, vorausgesetzt, Sie sind bereit, V8 zu ändern und Ihre eigene Version davon zu kompilieren.

Wenn ja, dann finden Sie in compiler.cc eine Ort, an dem MakeCode in MakeFunctionInfo aufgerufen wird, wodurch der AST, der im übergebenen CompilationInfo-Objekt gespeichert ist, in nativen Code umgewandelt wird. Sie müssen dann eine Klasse schreiben, die von AstVisitor erbt Sie können den AST überprüfen, indem Sie die folgenden Zeilen vor dem Aufruf von MakeCode einfügen:

%Vor%

Da V8 Funktionen just-in-time kompiliert, wenn sie tatsächlich aufgerufen werden, gibt es einen anderen Punkt in CompileLazy , wo Sie dasselbe tun müssten, um ihre ASTs während der Ausführung von aufrufenden Skripten zu erhalten / p>

Wegen der Lazy Compilation-Funktion wird es Ihnen wahrscheinlich nicht möglich sein, eine statische Analyse durchzuführen, da die Ausführung bereits im Gange ist, bevor Sie Zugriff auf die ASTs für lazy compiled stuff haben. Aber so erhalten Sie die ASTs.

    
Jonas 04.10.2012, 14:53
quelle
1

Verwenden Sie --print-ast via SetFlagsFromString

    
hplbsh 03.04.2012 06:17
quelle
0

Nun, ich weiß nicht, was Sie erreichen wollen, aber es klingt so, als wollten Sie den AST innerhalb Ihres C ++ - Codes ändern (oder vielleicht auch Wrapper-Klassen für den JavaScript-Kontext schreiben?).

Ich schlage vor, einen Blick auf die Header-Datei zu werfen, die ziemlich genau erklärt, was dort für den AST von V8 verwendet wird:

Ссылка

~ Prost

    
Christoph Martens 23.07.2012 08:45
quelle