mirror of
https://github.com/radareorg/radare2.git
synced 2024-11-26 22:50:48 +00:00
Use RPluginMeta in RParse plugins ##refactor
This commit is contained in:
parent
b60135be09
commit
8965dc6f16
@ -1,12 +1,6 @@
|
||||
/* radare - LGPL - Copyright 2015-2021 - pancake, qnix */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
/* radare - LGPL - Copyright 2015-2024 - pancake, qnix */
|
||||
|
||||
#include <r_lib.h>
|
||||
#include <r_util.h>
|
||||
#include <r_flag.h>
|
||||
#include <r_anal.h>
|
||||
#include <r_parse.h>
|
||||
|
||||
@ -183,8 +177,10 @@ static int parse(RParse *p, const char *data, char *str) {
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_6502_pseudo = {
|
||||
.meta = {
|
||||
.name = "6502.pseudo",
|
||||
.desc = "6502 pseudo syntax",
|
||||
},
|
||||
.parse = parse,
|
||||
};
|
||||
|
||||
|
@ -484,8 +484,10 @@ static bool subvar(RParse *p, RAnalFunction *f, ut64 addr, int oplen, char *data
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_arm_pseudo = {
|
||||
.meta = {
|
||||
.name = "arm.pseudo",
|
||||
.desc = "ARM/ARM64 pseudo syntax",
|
||||
},
|
||||
.parse = parse,
|
||||
.subvar = &subvar,
|
||||
};
|
||||
|
@ -209,8 +209,10 @@ static int parse(RParse *p, const char *data, char *str) {
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_avr_pseudo = {
|
||||
.meta = {
|
||||
.name = "avr.pseudo",
|
||||
.desc = "AVR pseudo syntax",
|
||||
},
|
||||
.parse = parse
|
||||
};
|
||||
|
||||
|
@ -83,8 +83,10 @@ static int parse(RParse *p, const char *data, char *str) {
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_bpf_pseudo = {
|
||||
.meta = {
|
||||
.name = "bpf.pseudo",
|
||||
.desc = "bpf pseudo syntax",
|
||||
},
|
||||
.parse = parse,
|
||||
};
|
||||
|
||||
|
@ -105,8 +105,10 @@ static int parse(RParse *p, const char *data, char *str) {
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_chip8_pseudo = {
|
||||
.meta = {
|
||||
.name = "chip8.pseudo",
|
||||
.desc = "chip8 pseudo syntax",
|
||||
},
|
||||
.parse = parse,
|
||||
};
|
||||
|
||||
|
@ -357,10 +357,10 @@ static int parse(RParse *p, const char *data, char *str) {
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_dalvik_pseudo = {
|
||||
.meta = {
|
||||
.name = "dalvik.pseudo",
|
||||
.desc = "DALVIK pseudo syntax",
|
||||
.init = NULL,
|
||||
.fini = NULL,
|
||||
},
|
||||
.parse = parse,
|
||||
};
|
||||
|
||||
|
@ -87,8 +87,10 @@ static int parse(RParse *p, const char *data, char *str) {
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_evm_pseudo = {
|
||||
.meta = {
|
||||
.name = "evm.pseudo",
|
||||
.desc = "evm pseudo syntax",
|
||||
},
|
||||
.parse = parse,
|
||||
};
|
||||
|
||||
|
@ -193,8 +193,10 @@ static int parse(RParse *p, const char *data, char *str) {
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_m68k_pseudo = {
|
||||
.meta = {
|
||||
.name = "m68k.pseudo",
|
||||
.desc = "M68K pseudo syntax",
|
||||
},
|
||||
.parse = parse,
|
||||
};
|
||||
|
||||
|
@ -365,10 +365,10 @@ static bool subvar(RParse *p, RAnalFunction *f, ut64 addr, int oplen, char *data
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_mips_pseudo = {
|
||||
.meta = {
|
||||
.name = "mips.pseudo",
|
||||
.desc = "MIPS pseudo syntax",
|
||||
.init = NULL,
|
||||
.fini = NULL,
|
||||
},
|
||||
.parse = parse,
|
||||
.subvar = subvar,
|
||||
};
|
||||
|
@ -3,8 +3,10 @@
|
||||
#include <r_parse.h>
|
||||
|
||||
RParsePlugin r_parse_plugin_null_pseudo = {
|
||||
.meta = {
|
||||
.name = "null.pseudo",
|
||||
.desc = "pseudo nothing",
|
||||
}
|
||||
};
|
||||
|
||||
#ifndef R2_PLUGIN_INCORE
|
||||
|
@ -1,11 +1,8 @@
|
||||
/* radare - LGPL - Copyright 2024 - pancake */
|
||||
|
||||
#include <r_lib.h>
|
||||
#include <r_flag.h>
|
||||
#include <r_anal.h>
|
||||
#include <r_parse.h>
|
||||
|
||||
|
||||
static int parse(RParse *p, const char *data, char *str) {
|
||||
// Intentationally left blank
|
||||
// because it's not yet implemented
|
||||
@ -13,8 +10,10 @@ static int parse(RParse *p, const char *data, char *str) {
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_pickle_pseudo = {
|
||||
.meta = {
|
||||
.name = "pickle.pseudo",
|
||||
.desc = "Pickle pseudo syntax",
|
||||
},
|
||||
.parse = parse, // parse actually converts the string into asm.pseudo
|
||||
};
|
||||
|
||||
|
@ -1746,8 +1746,10 @@ static int parse(RParse *p, const char *data, char *str) {
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_ppc_pseudo = {
|
||||
.meta = {
|
||||
.name = "ppc.pseudo",
|
||||
.desc = "PowerPC pseudo syntax",
|
||||
},
|
||||
.parse = parse,
|
||||
};
|
||||
|
||||
|
@ -1,8 +1,6 @@
|
||||
/* radare - LGPL - Copyright 2020 - Aswin C (officialcjunior) */
|
||||
/* radare - LGPL - Copyright 2020-2024 - Aswin C (officialcjunior) */
|
||||
|
||||
#include <r_lib.h>
|
||||
#include <r_flag.h>
|
||||
#include <r_anal.h>
|
||||
#include <r_parse.h>
|
||||
|
||||
static int replace(int argc, const char *argv[], char *newstr) {
|
||||
@ -217,8 +215,10 @@ static int parse(RParse *p, const char *data, char *str) {
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_riscv_pseudo = {
|
||||
.meta = {
|
||||
.name = "riscv.pseudo",
|
||||
.desc = "riscv pseudo syntax",
|
||||
},
|
||||
.parse = parse,
|
||||
};
|
||||
|
||||
|
@ -265,8 +265,10 @@ static int parse(RParse *p, const char *data, char *str) {
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_sh_pseudo = {
|
||||
.meta = {
|
||||
.name = "sh.pseudo",
|
||||
.desc = "SH-4 pseudo syntax",
|
||||
},
|
||||
.parse = parse
|
||||
};
|
||||
|
||||
|
@ -224,8 +224,10 @@ static int parse(RParse *p, const char *data, char *str) {
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_stm8_pseudo = {
|
||||
.meta = {
|
||||
.name = "stm8.pseudo",
|
||||
.desc = "STM8 pseudo syntax",
|
||||
},
|
||||
.parse = parse,
|
||||
};
|
||||
|
||||
|
@ -175,8 +175,10 @@ static int parse(RParse *p, const char *data, char *str) {
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_tms320_pseudo = {
|
||||
.meta = {
|
||||
.name = "tms320.pseudo",
|
||||
.desc = "tms320 pseudo syntax",
|
||||
},
|
||||
.parse = parse,
|
||||
};
|
||||
|
||||
|
@ -462,8 +462,10 @@ static int fini(RParse *p, void *usr) {
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_tricore_pseudo = {
|
||||
.meta = {
|
||||
.name = "tricore.pseudo",
|
||||
.desc = "TriCore pseudo syntax",
|
||||
},
|
||||
.parse = &parse,
|
||||
.subvar = &subvar,
|
||||
.fini = &fini,
|
||||
|
@ -221,8 +221,10 @@ static bool subvar(RParse *p, RAnalFunction *f, ut64 addr, int oplen, char *data
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_v850_pseudo = {
|
||||
.meta = {
|
||||
.name = "v850.pseudo",
|
||||
.desc = "v850 pseudo syntax",
|
||||
},
|
||||
.parse = parse,
|
||||
.subvar = &subvar,
|
||||
};
|
||||
|
@ -1,8 +1,5 @@
|
||||
/* radare - LGPL - Copyright 2019 - deroad */
|
||||
/* radare - LGPL - Copyright 2019-2024 - deroad */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <r_lib.h>
|
||||
#include <r_util.h>
|
||||
#include <r_flag.h>
|
||||
@ -30,8 +27,10 @@ static bool subvar(RParse *p, RAnalFunction *f, ut64 addr, int oplen, char *data
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_wasm_pseudo = {
|
||||
.meta = {
|
||||
.name = "wasm.pseudo",
|
||||
.desc = "WASM pseudo syntax",
|
||||
},
|
||||
.subvar = &subvar,
|
||||
};
|
||||
|
||||
|
@ -165,8 +165,10 @@ static int parse(RParse *p, const char *data, char *str) {
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_att2intel = {
|
||||
.meta = {
|
||||
.name = "att2intel",
|
||||
.desc = "X86 att 2 intel plugin",
|
||||
},
|
||||
.parse = &parse,
|
||||
};
|
||||
|
||||
|
@ -574,8 +574,10 @@ static int fini(RParse *p, void *usr) {
|
||||
}
|
||||
|
||||
RParsePlugin r_parse_plugin_x86_pseudo = {
|
||||
.meta = {
|
||||
.name = "x86.pseudo",
|
||||
.desc = "X86 pseudo syntax",
|
||||
},
|
||||
.parse = &parse,
|
||||
.subvar = &subvar,
|
||||
.fini = &fini,
|
||||
|
@ -80,14 +80,18 @@ static int parse(RParse *p, const char *data, char *str) {
|
||||
|
||||
#if Z80_IS_GB
|
||||
RParsePlugin r_parse_plugin_gb_pseudo = {
|
||||
.meta = {
|
||||
.name = "gb.pseudo",
|
||||
.desc = "GameBoy pseudo syntax",
|
||||
},
|
||||
.parse = parse, // parse actually converts the string into asm.pseudo
|
||||
};
|
||||
#else
|
||||
RParsePlugin r_parse_plugin_z80_pseudo = {
|
||||
.meta = {
|
||||
.name = "z80.pseudo",
|
||||
.desc = "Z80 pseudo syntax",
|
||||
},
|
||||
.parse = parse, // parse actually converts the string into asm.pseudo
|
||||
};
|
||||
#endif
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* radare2 - LGPL - Copyright 2009-2023 - nibble, pancake, maijin */
|
||||
/* radare2 - LGPL - Copyright 2009-2024 - nibble, pancake, maijin */
|
||||
|
||||
#include <r_parse.h>
|
||||
|
||||
@ -14,10 +14,11 @@ static bool isvalidflag(RFlagItem *flag) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (strstr (flag->name, "main") || strstr (flag->name, "entry")) {
|
||||
const char *flag_name = flag->name;
|
||||
if (strstr (flag_name, "main") || strstr (flag_name, "entry")) {
|
||||
return true;
|
||||
}
|
||||
if (strchr (flag->name, '.')) {
|
||||
if (strchr (flag_name, '.')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -148,7 +149,7 @@ static bool filter(RParse *p, ut64 addr, RFlag *f, RAnalHint *hint, char *data,
|
||||
const int seggrn = p->analb.anal->config->seggrn;
|
||||
bool x86 = false;
|
||||
bool arm = false;
|
||||
const char *pname = (p && p->cur && p->cur->name) ? p->cur->name: NULL;
|
||||
const char *pname = R_UNWRAP3 (p, cur, meta.name);
|
||||
if (pname) {
|
||||
if (r_str_startswith (pname, "x86")) {
|
||||
x86 = true;
|
||||
@ -596,7 +597,7 @@ R_API bool r_parse_filter(RParse *p, ut64 addr, RFlag *f, RAnalHint *hint, char
|
||||
// r_asm_subvar()
|
||||
// r_asm_replace()
|
||||
|
||||
// R2_590 - easier to use, should replace r_asm_filter(), but its not using rflag, analhint, endian, etc
|
||||
// R2_600 - easier to use, should replace r_asm_filter(), but its not using rflag, analhint, endian, etc
|
||||
// this function is unused, but there's data we are missing, like the analhint.. that we must ensure that is called before calling this. so we need more tests for this.
|
||||
R_API char *r_parse_filter_dup(RParse *p, ut64 addr, const char *opstr) {
|
||||
const size_t out_len = 256;
|
||||
|
@ -111,7 +111,7 @@ R_API bool r_parse_use(RParse *p, const char *name) {
|
||||
RListIter *iter;
|
||||
RParsePlugin *h;
|
||||
r_list_foreach (p->parsers, iter, h) {
|
||||
if (!strcmp (h->name, name)) {
|
||||
if (!strcmp (h->meta.name, name)) {
|
||||
p->cur = h;
|
||||
return true;
|
||||
}
|
||||
@ -120,7 +120,7 @@ R_API bool r_parse_use(RParse *p, const char *name) {
|
||||
if (strchr (name, '.')) {
|
||||
char *sname = predotname (name);
|
||||
r_list_foreach (p->parsers, iter, h) {
|
||||
char *shname = predotname (h->name);
|
||||
char *shname = predotname (h->meta.name);
|
||||
found = !strcmp (shname, sname);
|
||||
free (shname);
|
||||
if (found) {
|
||||
@ -132,14 +132,14 @@ R_API bool r_parse_use(RParse *p, const char *name) {
|
||||
}
|
||||
if (!found) {
|
||||
R_LOG_WARN ("Cannot find asm.parser for %s", name);
|
||||
if (p->cur && p->cur->name) {
|
||||
if (r_str_startswith (p->cur->name, "null")) {
|
||||
if (p->cur && p->cur->meta.name) {
|
||||
if (r_str_startswith (p->cur->meta.name, "null")) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// check if p->cur
|
||||
r_list_foreach (p->parsers, iter, h) {
|
||||
if (r_str_startswith (h->name, "null")) {
|
||||
if (r_str_startswith (h->meta.name, "null")) {
|
||||
R_LOG_INFO ("Fallback to null");
|
||||
// R_LOG_INFO ("Fallback to null from %s", p->cur->name);
|
||||
p->cur = h;
|
||||
|
@ -1048,7 +1048,7 @@ static void update_asmparser_options(RCore *core, RConfigNode *node) {
|
||||
if (core && node && core->parser && core->parser->parsers) {
|
||||
r_config_node_purge_options (node);
|
||||
r_list_foreach (core->parser->parsers, iter, parser) {
|
||||
SETOPTIONS (node, parser->name, NULL);
|
||||
SETOPTIONS (node, parser->meta.name, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -40,10 +40,9 @@ typedef struct r_parse_t {
|
||||
RAnalLabelAt label_get;
|
||||
} RParse; // TODO rename to RAsmParseState
|
||||
|
||||
// TODO Rename to asm plugins?
|
||||
typedef struct r_parse_plugin_t {
|
||||
// TODO R2_600 Use RPluginMeta instead
|
||||
char *name;
|
||||
char *desc;
|
||||
RPluginMeta meta;
|
||||
bool (*init)(RParse *p, void *user); // returns an RAsmParseState*
|
||||
int (*fini)(RParse *p, void *user); // receives the asmparsestate
|
||||
|
||||
|
@ -110,8 +110,8 @@ static JSValue r2plugin_parse_load(JSContext *ctx, JSValueConst this_val, int ar
|
||||
};
|
||||
memcpy ((void*)&ap->meta, &meta, sizeof (RPluginMeta));
|
||||
#else
|
||||
ap->name = strdup (nameptr);
|
||||
ap->desc = descptr ? strdup (descptr) : NULL;
|
||||
ap->meta.name = strdup (nameptr);
|
||||
ap->meta.desc = descptr ? strdup (descptr) : NULL;
|
||||
// ap->license = strdup (licenseptr);
|
||||
#endif
|
||||
|
||||
@ -129,6 +129,6 @@ static JSValue r2plugin_parse_load(JSContext *ctx, JSValueConst this_val, int ar
|
||||
lib->type = R_LIB_TYPE_PARSE;
|
||||
lib->data = ap;
|
||||
lib->version = R2_VERSION;
|
||||
int ret = r_lib_open_ptr (pm->core->lib, ap->name, NULL, lib);
|
||||
int ret = r_lib_open_ptr (pm->core->lib, ap->meta.name, NULL, lib);
|
||||
return JS_NewBool (ctx, ret == 1);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user