나는 거미 원숭이를 처음 사용하며 바이트 코드 시퀀스로 변환 자바 스크립트 파일을 위해 사용하고 싶습니다. 나는 거미 원숭이를 얻고 그것을 디버그 모드로 만든다.spidermonkey를 사용하여 opcode로 자바 스크립트 변환
jsapi.h에서 JS_CompileScript 함수를 사용하여 자바 스크립트 코드를 컴파일하고 바이트 코드를 얻으 려면이 코드를 컴파일하고 실행하면 런타임 오류가 발생합니다. 오류는 "spiderMonkeyTest.exe의 처리되지 않은 예외 (0x200f55c020 (mozjs185-1.0.dll)) : 0xC0000005 : 0x00000d4c 위치를 읽는 액세스 위반입니다." 나는 그것을 해결하지 못합니다.
어떤 몸이라도이 문제를 해결하거나 스파이더 원숭이를 사용하여 자바 스크립트 코드에서 바이트 코드를 가져 오는 다른 솔루션을 도입하는 데 도움이 될 수 있습니까?
// 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;
}