Add fake 'r2papi' module for r2frida-compile scripts ##lang

This commit is contained in:
pancake 2023-03-01 01:57:59 +01:00 committed by pancake
parent 5a74cf1c4a
commit cc16725dec
2 changed files with 24 additions and 1 deletions

View File

@ -95,6 +95,7 @@ static bool r2qjs_arch_decode(RArchSession *s, struct r_anal_op_t *op, RArchDeco
if (op->mnemonic) {
op->mnemonic = strdup (op->mnemonic);
}
R2QJS_GETNUMBER (op->type, obj, "type", NULL);
// return value
return JS_ToBool (ctx, res);
failure:

View File

@ -7,12 +7,34 @@ const char * const alias_marker = "\n↻ ";
static void r2qjs_dump_obj(JSContext *ctx, JSValueConst val);
static char *r2qjs_normalize_module_name(void* self, JSContext * ctx, const char * base_name, const char * name) {
if (r_str_startswith (base_name, "./")) {
return strdup (base_name + 1);
}
// R_LOG_INFO ("normalize (%s) (%s)", base_name, name);
return strdup (base_name + 1);
return strdup (base_name);
}
static JSModuleDef *r2qjs_load_module(JSContext *ctx, const char *module_name, void *opaque) {
HtPP *ht = opaque;
if (!strcmp (module_name, "r2papi")) {
const char *data = "export var R2Papi = global.R2Papi;\n"\
"export var R2PapiShell = global.R2PapiShell;\n"\
"export var NativePointer = global.NativePointer;\n"\
"export var EsilParser = global.EsilParser;\n"\
"export var EsilToken = global.EsilToken;\n"\
"export var r2 = global.r2;\n"\
"export var R = global.R;\n"\
;
JSValue val = JS_Eval (ctx, data, strlen (data), module_name,
JS_EVAL_TYPE_MODULE | JS_EVAL_FLAG_STRICT | JS_EVAL_FLAG_COMPILE_ONLY);
if (JS_IsException (val)) {
JSValue e = JS_GetException (ctx);
r2qjs_dump_obj (ctx, e);
return NULL;
}
JS_FreeValue (ctx, val);
return JS_VALUE_GET_PTR (val);
}
char *data = ht_pp_find (ht, module_name, NULL);
if (data) {
JSValue val = JS_Eval (ctx, data, strlen (data), module_name,