mirror of
https://github.com/radareorg/radare2.git
synced 2024-12-11 23:16:05 +00:00
Split avr into avr and avra
This commit is contained in:
parent
972e567664
commit
74566827d1
@ -2,11 +2,35 @@
|
||||
|
||||
#include "r_anal.h"
|
||||
|
||||
R_API void r_anal_print_rtti (RAnal *anal) {
|
||||
R_API void r_anal_rtti_print_at_vtable(RAnal *anal, ut64 addr) {
|
||||
RVTableContext context;
|
||||
r_anal_vtable_begin (anal, &context);
|
||||
if (context.abi == R_ANAL_CPP_ABI_MSVC) {
|
||||
r_anal_rtti_msvc_print_all (&context);
|
||||
r_anal_rtti_msvc_print_at_vtable (&context, addr);
|
||||
} else {
|
||||
eprint ("RTTI not supported yet for Itanium.\n");
|
||||
}
|
||||
}
|
||||
|
||||
static void rtti_msvc_print_all(RVTableContext *context) {
|
||||
RList *vtables = r_anal_vtable_search (context);
|
||||
RListIter *vtableIter;
|
||||
RVTableInfo *table;
|
||||
|
||||
if (vtables) {
|
||||
r_list_foreach (vtables, vtableIter, table) {
|
||||
r_anal_rtti_msvc_print_at_vtable (context, table->saddr);
|
||||
r_cons_print ("\n");
|
||||
}
|
||||
}
|
||||
r_list_free (vtables);
|
||||
}
|
||||
|
||||
R_API void r_anal_rtti_print_all(RAnal *anal) {
|
||||
RVTableContext context;
|
||||
r_anal_vtable_begin (anal, &context);
|
||||
if (context.abi == R_ANAL_CPP_ABI_MSVC) {
|
||||
rtti_msvc_print_all (&context);
|
||||
} else {
|
||||
eprint ("RTTI not supported yet for Itanium.\n");
|
||||
}
|
||||
|
@ -302,16 +302,6 @@ static void rtti_msvc_print_complete_object_locator_recurse(RVTableContext *cont
|
||||
}
|
||||
}
|
||||
|
||||
R_API void r_anal_rtti_msvc_print_all(RVTableContext *context) {
|
||||
RList *vtables = r_anal_vtable_search (context);
|
||||
RListIter *vtableIter;
|
||||
RVTableInfo *table;
|
||||
|
||||
if (vtables) {
|
||||
r_list_foreach (vtables, vtableIter, table) {
|
||||
rtti_msvc_print_complete_object_locator_recurse (context, table->saddr);
|
||||
r_cons_print ("\n");
|
||||
}
|
||||
}
|
||||
r_list_free (vtables);
|
||||
R_API void r_anal_rtti_msvc_print_at_vtable(RVTableContext *context, ut64 addr) {
|
||||
rtti_msvc_print_complete_object_locator_recurse (context, addr);
|
||||
}
|
||||
|
@ -548,7 +548,8 @@ static const char *help_msg_av[] = {
|
||||
"av", "", "search for vtables in data sections and show results",
|
||||
"avj", "", "like av, but as json",
|
||||
"av*", "", "like av, but as r2 commands",
|
||||
"avr", "", "search for vtables and try to parse RTTI (see anal.cpp.abi)",
|
||||
"avr", "[@addr]", "try to parse RTTI at vtable addr (see anal.cpp.abi)",
|
||||
"avra", "", "search for vtables and try to parse RTTI at each of them",
|
||||
NULL
|
||||
};
|
||||
|
||||
@ -6413,6 +6414,20 @@ static bool anal_fcn_data_gaps (RCore *core, const char *input) {
|
||||
return true;
|
||||
}
|
||||
|
||||
static void cmd_anal_rtti(RCore *core, const char *input) {
|
||||
switch (input[0]) {
|
||||
case '\0': // "avr"
|
||||
r_anal_rtti_print_at_vtable (core->anal, core->offset);
|
||||
break;
|
||||
case 'a': // "avra"
|
||||
r_anal_rtti_print_all (core->anal);
|
||||
break;
|
||||
default :
|
||||
r_core_cmd_help (core, help_msg_av);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void cmd_anal_virtual_functions(RCore *core, const char* input) {
|
||||
switch (input[0]) {
|
||||
case '\0': // "av"
|
||||
@ -6421,7 +6436,7 @@ static void cmd_anal_virtual_functions(RCore *core, const char* input) {
|
||||
r_anal_list_vtables (core->anal, input[0]);
|
||||
break;
|
||||
case 'r': // "avr"
|
||||
r_anal_print_rtti (core->anal);
|
||||
cmd_anal_rtti (core, input + 1);
|
||||
break;
|
||||
default :
|
||||
r_core_cmd_help (core, help_msg_av);
|
||||
|
@ -1694,8 +1694,9 @@ R_API RList *r_anal_vtable_get_methods(RVTableContext *context, RVTableInfo *tab
|
||||
R_API void r_anal_list_vtables(RAnal *anal, int rad);
|
||||
|
||||
/* rtti */
|
||||
R_API void r_anal_rtti_msvc_print_all(RVTableContext *context);
|
||||
R_API void r_anal_print_rtti(RAnal *anal);
|
||||
R_API void r_anal_rtti_msvc_print_at_vtable(RVTableContext *context, ut64 addr);
|
||||
R_API void r_anal_rtti_print_at_vtable(RAnal *anal, ut64 addr);
|
||||
R_API void r_anal_rtti_print_all(RAnal *anal);
|
||||
|
||||
/* plugin pointers */
|
||||
extern RAnalPlugin r_anal_plugin_null;
|
||||
|
Loading…
Reference in New Issue
Block a user