Я новичок в паукообразных обезьянах и хочу использовать его для преобразования файла java-скрипта в последовательность байтового кода. я получаю обезьяну-паука и строю ее в режиме отладки.
я хочу использовать функцию JS_CompileScript в jsapi.h для компиляции кода javascript и анализа его для получения байт-кода, но когда я компилирую код ниже и запускаю его, я получаю ошибку времени выполнения. ошибка «Необработанное исключение по адресу 0x0f55c020 (mozjs185-1.0.dll) в файле spiderMonkeyTest.exe: 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;
}