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