我是新來的蜘蛛猴,想用它來轉換Java腳本文件以字節碼的順序。 我得到蜘蛛猴,並建立它在調試模式。將javascript轉換爲使用spidermonkey的操作碼
我想在jsapi.h中使用JS_CompileScript函數來編譯javascript代碼並分析這個來獲取字節碼,但是當編譯下面的代碼並運行它時,我得到了運行時錯誤。 spiderMonkeyTest.exe中的錯誤是「未處理的0x0f55c020(mozjs185-1.0.dll)異常:0xC0000005:訪問衝突讀取位置0x00000d4c」。我不解決它。
任何機構都可以幫助我解決這個問題或引入其他解決方案,以通過使用蜘蛛猴從JavaScript代碼獲取字節碼?
// spiderMonkeyTest.cpp : Defines the entry point for the console application.
//
#define XP_WIN
#include <iostream>
#include <fstream>
#include "stdafx.h"
#include "jsapi.h"
#include "jsanalyze.h"
using namespace std;
using namespace js;
static JSClass global_class = { "global",
JSCLASS_NEW_RESOLVE | JSCLASS_GLOBAL_FLAGS,
JS_PropertyStub,
NULL,
JS_PropertyStub,
JS_StrictPropertyStub,
JS_EnumerateStub,
JS_ResolveStub,
JS_ConvertStub,
NULL,
JSCLASS_NO_OPTIONAL_MEMBERS
};
int _tmain(int argc, _TCHAR* argv[]) {
/* Create a JS runtime. */
JSRuntime *rt = JS_NewRuntime(16L * 1024L * 1024L);
if (rt == NULL)
return 1;
/* Create a context. */
JSContext *cx = JS_NewContext(rt, 8192);
if (cx == NULL)
return 1;
JS_SetOptions(cx, JSOPTION_VAROBJFIX);
JSScript *script;
JSObject *obj;
const char *js = "function a() { var tmp; tmp = 1 + 2; temp = temp * 2; alert(tmp); return 1; }";
obj = JS_CompileScript(cx,JS_GetGlobalObject(cx),js,strlen(js),"code.js",NULL);
script = obj->getScript();
if (script == NULL)
return JS_FALSE; /* compilation error */
js::analyze::Script *sc = new js::analyze::Script();
sc->analyze(cx,script);
JS_DestroyContext(cx);
JS_DestroyRuntime(rt);
/* Shut down the JS engine. */
JS_ShutDown();
return 1;
}