shift-interpreter
Version:
Shift-interpreter is an experimental JavaScript meta-interpreter useful for reverse engineering and analysis. One notable difference from other projects is that shift-interpreter retains state over an entire script but can be fed expressions and statement
72 lines (71 loc) • 4.23 kB
TypeScript
import { ArrayExpression, ArrowExpression, AssignmentExpression, BinaryExpression, Block, BlockStatement, CallExpression, ClassDeclaration, CompoundAssignmentExpression, ComputedMemberExpression, ConditionalExpression, DoWhileStatement, ExpressionStatement, ForInStatement, ForOfStatement, ForStatement, FunctionBody, FunctionDeclaration, FunctionExpression, IdentifierExpression, IfStatement, LiteralBooleanExpression, LiteralInfinityExpression, LiteralNullExpression, LiteralNumericExpression, LiteralRegExpExpression, LiteralStringExpression, NewExpression, ObjectExpression, ReturnStatement, Script, StaticMemberExpression, TemplateExpression, ThisExpression, ThrowStatement, TryCatchStatement, TryFinallyStatement, UnaryExpression, UpdateExpression, VariableDeclarationStatement, VariableDeclarator, WhileStatement } from 'shift-ast';
import { Interpreter } from './interpreter';
export interface DynamicClass {
[key: string]: any;
}
export declare class NodeHandler {
interpreter: Interpreter;
constructor(interpreter: Interpreter);
ReturnStatement(stmt: ReturnStatement): any;
ExpressionStatement(stmt: ExpressionStatement): any;
VariableDeclarationStatement(stmt: VariableDeclarationStatement): void;
VariableDeclarator(declarator: VariableDeclarator): void;
FunctionDeclaration(decl: FunctionDeclaration): void;
BlockStatement(stmt: BlockStatement): any;
ClassDeclaration(decl: ClassDeclaration): DynamicClass;
IfStatement(stmt: IfStatement): any;
ConditionalExpression(stmt: ConditionalExpression): any;
ThrowStatement(stmt: ThrowStatement): void;
TryCatchStatement(stmt: TryCatchStatement): any;
TryFinallyStatement(stmt: TryFinallyStatement): any;
Block(block: Block): any;
FunctionBody(body: FunctionBody): any;
Script(body: Script): any;
loopBlock(stmt: ForOfStatement | ForInStatement | ForStatement | WhileStatement | DoWhileStatement): void;
ForOfStatement(stmt: ForOfStatement): void;
ForInStatement(stmt: ForInStatement): void;
ForStatement(stmt: ForStatement): void;
WhileStatement(stmt: WhileStatement): void;
DoWhileStatement(stmt: DoWhileStatement): void;
ThisExpression(expr: ThisExpression): Record<string, any>;
NewExpression(expr: NewExpression): any;
ArrayExpression(expr: ArrayExpression): any[];
ObjectExpression(expr: ObjectExpression): {
[key: string]: any;
};
StaticMemberExpression(expr: StaticMemberExpression): any;
ComputedMemberExpression(expr: ComputedMemberExpression): any;
CallExpression(expr: CallExpression): any;
AssignmentExpression(expr: AssignmentExpression): any;
UpdateExpression(expr: UpdateExpression): any;
CompoundAssignmentExpression(expr: CompoundAssignmentExpression): any;
LiteralRegExpExpression(expr: LiteralRegExpExpression): RegExp;
TemplateExpression(expr: TemplateExpression): string;
ArrowExpression(expr: ArrowExpression): (...args: any) => any;
FunctionExpression(expr: FunctionExpression): ((this: any, ...args: any) => any) & {
_interp: boolean;
};
IdentifierExpression(expr: IdentifierExpression): any;
LiteralNumericExpression(expr: LiteralNumericExpression): number;
LiteralStringExpression(expr: LiteralStringExpression): string;
LiteralBooleanExpression(expr: LiteralBooleanExpression): boolean;
LiteralInfinityExpression(expr?: LiteralInfinityExpression): number;
LiteralNullExpression(expr?: LiteralNullExpression): null;
BinaryExpression(expr: BinaryExpression): any;
UnaryExpression(expr: UnaryExpression): any;
BreakStatement(...args: any): void;
ContinueStatement(...args: any): void;
DebuggerStatement(...args: any): void;
EmptyStatement(...args: any): void;
WithStatement(...args: any): void;
SwitchStatementWithDefault(...args: any): void;
SwitchStatement(...args: any): void;
LabeledStatement(...args: any): void;
ForAwaitStatement(...args: any): void;
NewTargetExpression(...args: any): void;
AwaitExpression(...args: any): void;
Super(...args: any): void;
ClassExpression(...args: any): void;
YieldExpression(...args: any): void;
YieldGeneratorExpression(...args: any): void;
}