1 /* radare - LGPL - Copyright 2019 - deroad */
2 
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6 #include <r_lib.h>
7 #include <r_util.h>
8 #include <r_flag.h>
9 #include <r_anal.h>
10 #include <r_parse.h>
11 
get_fcn_name(RAnal * anal,ut32 fcn_id)12 static char* get_fcn_name(RAnal *anal, ut32 fcn_id) {
13 	const char *s = anal->binb.get_name (anal->binb.bin, 'f', fcn_id, false);
14 	return s? strdup (s): NULL;
15 }
16 
subvar(RParse * p,RAnalFunction * f,ut64 addr,int oplen,char * data,char * str,int len)17 static bool subvar(RParse *p, RAnalFunction *f, ut64 addr, int oplen, char *data, char *str, int len) {
18 	char *fcn_name = NULL;
19 	str[0] = 0;
20 	if (!strncmp (data, "call ", 5)) {
21 		ut32 fcn_id = (ut32) r_num_get (NULL, data + 5);
22 		if (!(fcn_name = get_fcn_name (p->analb.anal, fcn_id))) {
23 			return false;
24 		}
25 		snprintf (str, len, "call sym.%s", fcn_name);
26 		free (fcn_name);
27 		return true;
28 	}
29 	return false;
30 }
31 
32 RParsePlugin r_parse_plugin_wasm_pseudo = {
33 	.name = "wasm.pseudo",
34 	.desc = "WASM pseudo syntax",
35 	.subvar = &subvar,
36 };
37 
38 #ifndef R2_PLUGIN_INCORE
39 R_API RLibStruct radare_plugin = {
40 	.type = R_LIB_TYPE_PARSE,
41 	.data = &r_parse_plugin_wasm_pseudo,
42 	.version = R2_VERSION
43 };
44 #endif
45