mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-26 00:55:59 +00:00
Migrate java plugin ##arch
This commit is contained in:
parent
6102b1208a
commit
8c3ce37255
2
dist/plugins-cfg/plugins.android.cfg
vendored
2
dist/plugins-cfg/plugins.android.cfg
vendored
@ -8,7 +8,7 @@ anal.x86_cs
|
||||
anal.arm_cs
|
||||
arch.arm_v35
|
||||
anal.mips_cs
|
||||
anal.java
|
||||
arch.java
|
||||
anal.dalvik
|
||||
anal.gb
|
||||
arch.null
|
||||
|
2
dist/plugins-cfg/plugins.bin.cfg
vendored
2
dist/plugins-cfg/plugins.bin.cfg
vendored
@ -25,7 +25,7 @@ anal.avr
|
||||
arch.bf
|
||||
anal.dalvik
|
||||
arch.i8080
|
||||
anal.java
|
||||
arch.java
|
||||
anal.m68k
|
||||
anal.mips_cs
|
||||
arch.ppc_cs
|
||||
|
2
dist/plugins-cfg/plugins.cs4.cfg
vendored
2
dist/plugins-cfg/plugins.cs4.cfg
vendored
@ -6,7 +6,7 @@ anal.avr
|
||||
anal.dalvik
|
||||
anal.gb
|
||||
arch.i8080
|
||||
anal.java
|
||||
arch.java
|
||||
anal.mips_cs
|
||||
anal.null
|
||||
arch.ppc_cs
|
||||
|
2
dist/plugins-cfg/plugins.def.cfg
vendored
2
dist/plugins-cfg/plugins.def.cfg
vendored
@ -6,7 +6,7 @@ anal.avr
|
||||
anal.dalvik
|
||||
anal.gb
|
||||
arch.i8080
|
||||
anal.java
|
||||
arch.java
|
||||
anal.mips_cs
|
||||
anal.null
|
||||
anal.x86_cs
|
||||
|
2
dist/plugins-cfg/plugins.ios-store.cfg
vendored
2
dist/plugins-cfg/plugins.ios-store.cfg
vendored
@ -6,7 +6,7 @@ anal.null
|
||||
anal.x86_cs
|
||||
anal.arm_cs
|
||||
anal.mips_cs
|
||||
anal.java
|
||||
arch.java
|
||||
anal.dalvik
|
||||
anal.gb
|
||||
arch.null
|
||||
|
2
dist/plugins-cfg/plugins.ios.cfg
vendored
2
dist/plugins-cfg/plugins.ios.cfg
vendored
@ -7,7 +7,7 @@ anal.null
|
||||
anal.x86_cs
|
||||
anal.arm_cs
|
||||
anal.mips_cs
|
||||
anal.java
|
||||
arch.java
|
||||
anal.dalvik
|
||||
anal.gb
|
||||
arch.null
|
||||
|
2
dist/plugins-cfg/plugins.mingw.cfg
vendored
2
dist/plugins-cfg/plugins.mingw.cfg
vendored
@ -15,7 +15,7 @@ anal.dalvik
|
||||
anal.gb
|
||||
arch.h8300
|
||||
arch.i8080
|
||||
anal.java
|
||||
arch.java
|
||||
arch.kvx
|
||||
arch.lh5801
|
||||
arch.m68k_cs
|
||||
|
2
dist/plugins-cfg/plugins.nocs.cfg
vendored
2
dist/plugins-cfg/plugins.nocs.cfg
vendored
@ -12,7 +12,7 @@ arch.ebc
|
||||
anal.gb
|
||||
arch.h8300
|
||||
arch.i8080
|
||||
anal.java
|
||||
arch.java
|
||||
arch.kvx
|
||||
arch.lh5801
|
||||
arch.xtensa
|
||||
|
2
dist/plugins-cfg/plugins.nogpl.cfg
vendored
2
dist/plugins-cfg/plugins.nogpl.cfg
vendored
@ -9,7 +9,7 @@ arch.ebc
|
||||
anal.gb
|
||||
arch.h8300
|
||||
arch.i8080
|
||||
anal.java
|
||||
arch.java
|
||||
arch.m680x_cs
|
||||
anal.mips_cs
|
||||
arch.msp430
|
||||
|
2
dist/plugins-cfg/plugins.static.cfg
vendored
2
dist/plugins-cfg/plugins.static.cfg
vendored
@ -11,7 +11,7 @@ anal.dalvik
|
||||
anal.gb
|
||||
arch.mcs96
|
||||
arch.i8080
|
||||
anal.java
|
||||
arch.java
|
||||
arch.hppa_gnu
|
||||
arch.kvx
|
||||
arch.lh5801
|
||||
|
2
dist/plugins-cfg/plugins.static.nogpl.cfg
vendored
2
dist/plugins-cfg/plugins.static.nogpl.cfg
vendored
@ -8,7 +8,7 @@ anal.dalvik
|
||||
anal.gb
|
||||
arch.lm32
|
||||
arch.i8080
|
||||
anal.java
|
||||
arch.java
|
||||
arch.m68k_cs
|
||||
anal.mips_cs
|
||||
arch.mcs96
|
||||
|
2
dist/plugins-cfg/plugins.termux.cfg
vendored
2
dist/plugins-cfg/plugins.termux.cfg
vendored
@ -5,7 +5,7 @@ anal.avr
|
||||
arch.bf
|
||||
anal.dalvik
|
||||
anal.gb
|
||||
anal.java
|
||||
arch.java
|
||||
arch.lh5801
|
||||
anal.mips_cs
|
||||
arch.mips_gnu
|
||||
|
2
dist/plugins-cfg/plugins.tiny.cfg
vendored
2
dist/plugins-cfg/plugins.tiny.cfg
vendored
@ -5,7 +5,7 @@ anal.null
|
||||
anal.x86_cs
|
||||
anal.arm_cs
|
||||
anal.mips_cs
|
||||
anal.java
|
||||
arch.java
|
||||
anal.dalvik
|
||||
anal.gb
|
||||
arch.null
|
||||
|
@ -51,7 +51,6 @@ r_anal_sources = [
|
||||
'p/anal_gb.c',
|
||||
'../arch/p/h8300/plugin.c',
|
||||
'../arch/p/h8300/h8300_disas.c',
|
||||
'p/anal_java.c',
|
||||
'../arch/p/lh5801/plugin.c',
|
||||
'../arch/p/m68k_cs/plugin.c',
|
||||
'../arch/p/m680x_cs/plugin.c',
|
||||
@ -129,7 +128,6 @@ r_anal = library('r_anal', r_anal_sources,
|
||||
r_cons_dep,
|
||||
r_syscall_dep,
|
||||
r_flag_dep,
|
||||
java_dep,
|
||||
capstone_dep
|
||||
],
|
||||
install: true,
|
||||
|
@ -17,6 +17,7 @@ v35pre:
|
||||
$(MAKE) -C p/arm/v35
|
||||
|
||||
include $(STATIC_ARCH_PLUGINS)
|
||||
include $(STOP)/java/deps.mk
|
||||
|
||||
STATIC_OBJS=$(subst ..,p/..,$(subst arch_,p/arch_,$(STATIC_OBJ)))
|
||||
OBJS=arch.o arch_config.o arch_switch.o arch_op.o
|
||||
|
@ -52,6 +52,7 @@ r_arch_sources = [
|
||||
'p/tms320/c55x_plus/decode_funcs.c',
|
||||
'p/tms320/c55x_plus/hashtable.c',
|
||||
'p/tms320/c55x_plus/utils.c',
|
||||
'p/java/plugin.c',
|
||||
# fails on windows
|
||||
# error LNK2005: SocketNotificationRetrieveEvents already defined in p_hppa_gnu_hppa-dis.c.obj
|
||||
'p/hppa/plugin_gnu.c',
|
||||
@ -180,6 +181,7 @@ r_arch = library('r_arch', r_arch_sources,
|
||||
dependencies: [
|
||||
r_util_dep,
|
||||
r_reg_dep,
|
||||
java_dep,
|
||||
capstone_dep,
|
||||
],
|
||||
install: true,
|
||||
|
@ -1,16 +1,16 @@
|
||||
OBJ_JAVA=anal_java.o
|
||||
OBJ_JAVA=p/java/plugin.o
|
||||
SHARED2_JAVA=$(addprefix ../,${SHARED_JAVA})
|
||||
|
||||
OBJ_JAVA+=${SHARED2_JAVA}
|
||||
|
||||
STATIC_OBJ+=${OBJ_JAVA}
|
||||
TARGET_JAVA=anal_java.${EXT_SO}
|
||||
TARGET_JAVA=java.${EXT_SO}
|
||||
|
||||
ALL_TARGETS+=${TARGET_JAVA}
|
||||
|
||||
${TARGET_JAVA}: ${OBJ_JAVA}
|
||||
${CC} $(call libname,anal_java) ${CFLAGS} \
|
||||
-o anal_java.${EXT_SO} \
|
||||
${CC} $(call libname,java) ${CFLAGS} \
|
||||
-o java.${EXT_SO} \
|
||||
${OBJ_JAVA} ${SHARED2_JAVA} \
|
||||
$(SHLR)/java/libr_java.$(EXT_AR) \
|
||||
$(SHLR)/sdb/src/libsdb.$(EXT_AR)
|
@ -1,7 +1,6 @@
|
||||
/* radare - Apache 2.0 - Copyright 2010-2022 - pancake and Adam Pridgen <dso@rice.edu || adam.pridgen@thecoverofnight.com> */
|
||||
|
||||
#include <r_lib.h>
|
||||
#include <r_anal.h>
|
||||
#include <r_arch.h>
|
||||
|
||||
#include "../../../shlr/java/ops.h"
|
||||
#include "../../../shlr/java/code.h"
|
||||
@ -12,23 +11,11 @@
|
||||
|
||||
static R_TH_LOCAL ut64 METHOD_START = 0;
|
||||
|
||||
static void java_update_anal_types(RAnal *anal, RBinJavaObj *bin_obj);
|
||||
static int java_cmd_ext(RAnal *anal, const char* input);
|
||||
static int java_op(RAnal *anal, RAnalOp *op, ut64 addr, const ut8 *data, int len, RAnalOpMask mask);
|
||||
static RBinJavaObj *get_java_bin_obj(RAnal *anal);
|
||||
|
||||
static RBinJavaObj *get_java_bin_obj(RAnal *anal) {
|
||||
RBin *b = anal->binb.bin;
|
||||
RBinPlugin *plugin = b->cur && b->cur->o ? b->cur->o->plugin : NULL;
|
||||
ut8 is_java = (plugin && strcmp (plugin->name, "java") == 0) ? 1 : 0;
|
||||
return is_java ? b->cur->o->bin_obj : NULL;
|
||||
}
|
||||
|
||||
static ut64 java_get_method_start(void) {
|
||||
return METHOD_START;
|
||||
}
|
||||
|
||||
static int java_switch_op(RAnal *anal, RAnalOp *op, ut64 addr, const ut8 *data, int len) {
|
||||
static int java_switch_op(RArchSession *as, RAnalOp *op, ut64 addr, const ut8 *data, int len) {
|
||||
ut8 op_byte = data[0];
|
||||
ut64 offset = addr - java_get_method_start ();
|
||||
ut8 pos = (offset + 1)%4 ? 1 + 4 - (offset+1)%4 : 1;
|
||||
@ -182,18 +169,21 @@ static int r_anal_java_is_op_type_eop(ut64 x) {
|
||||
(x & R_ANAL_JAVA_CODEOP_SWITCH) == R_ANAL_JAVA_CODEOP_SWITCH);
|
||||
}
|
||||
|
||||
static int java_op(RAnal *anal, RAnalOp *op, ut64 addr, const ut8 *data, int len, RAnalOpMask mask) {
|
||||
/* get opcode size */
|
||||
static bool decode(RArchSession *as, RAnalOp *op, RAnalOpMask mask) {
|
||||
const ut64 addr = op->addr;
|
||||
const ut8 *data = op->bytes;
|
||||
const int len = op->size;
|
||||
// get opcode size
|
||||
if (len < 1) {
|
||||
op->type = R_ANAL_OP_TYPE_ILL;
|
||||
return 1;
|
||||
return true; // XXX return false; ?
|
||||
}
|
||||
//ut8 op_byte = data[0];
|
||||
|
||||
ut8 op_byte = data[0];
|
||||
int sz = JAVA_OPS[op_byte].size;
|
||||
if (!op) {
|
||||
op->type = R_ANAL_OP_TYPE_ILL;
|
||||
return sz;
|
||||
return sz > 0;
|
||||
}
|
||||
IFDBG {
|
||||
R_LOG_DEBUG ("Extracting op from buffer (%d byte(s)) @ 0x%04x", (int)len, (ut32)addr);
|
||||
@ -206,13 +196,13 @@ static int java_op(RAnal *anal, RAnalOp *op, ut64 addr, const ut8 *data, int len
|
||||
op->type = map_java_op_to_anal_op_type (op->type2);
|
||||
// handle lookup and table switch offsets
|
||||
if (op_byte == 0xaa || op_byte == 0xab) {
|
||||
java_switch_op (anal, op, addr, data, len);
|
||||
java_switch_op (as, op, addr, data, len);
|
||||
// IN_SWITCH_OP = 1;
|
||||
}
|
||||
|
||||
if (mask & R_ARCH_OP_MASK_DISASM) {
|
||||
RBinJavaObj *obj = NULL;
|
||||
RBin *bin = anal->binb.bin;
|
||||
RBin *bin = as->arch->binb.bin;
|
||||
RBinPlugin *plugin = bin && bin->cur && bin->cur->o ?
|
||||
bin->cur->o->plugin : NULL;
|
||||
if (plugin && plugin->name) {
|
||||
@ -245,7 +235,7 @@ static int java_op(RAnal *anal, RAnalOp *op, ut64 addr, const ut8 *data, int len
|
||||
op->type2 = 0;
|
||||
op->type = R_ANAL_OP_TYPE_CASE
|
||||
op->eob = 0;
|
||||
return op->sizes;
|
||||
return op->sizes > 0;
|
||||
}
|
||||
*/
|
||||
|
||||
@ -260,7 +250,7 @@ static int java_op(RAnal *anal, RAnalOp *op, ut64 addr, const ut8 *data, int len
|
||||
|
||||
if (len < 4) {
|
||||
// incomplete analysis here
|
||||
return op->size; // 0
|
||||
return op->size > 0; // XXX false
|
||||
}
|
||||
if (op->type == R_ANAL_OP_TYPE_POP) {
|
||||
op->stackop = R_ANAL_STACK_INC;
|
||||
@ -284,11 +274,27 @@ static int java_op(RAnal *anal, RAnalOp *op, ut64 addr, const ut8 *data, int len
|
||||
op->fail = addr + sz;
|
||||
//IFDBG eprintf ("%s callto 0x%04x failto 0x%04x.\n", JAVA_OPS[op_byte].name, op->jump, op->fail);
|
||||
}
|
||||
return op->size;
|
||||
return op->size > 0;
|
||||
}
|
||||
|
||||
static int java_opasm(RAnal *a, ut64 addr, const char *str, ut8 *outbuf, int outsize) {
|
||||
return r_java_assemble (addr, outbuf, str);
|
||||
static bool encode(RArchSession *as, RAnalOp *op, ut32 mask) {
|
||||
ut8 bytes[8] = {0};
|
||||
int size = r_java_assemble (op->addr, bytes, op->mnemonic);
|
||||
if (size > 0) {
|
||||
op->bytes = r_mem_dup (bytes, size);
|
||||
op->size = size;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static RBinJavaObj *get_java_bin_obj(RAnal *anal) {
|
||||
RBin *b = anal->binb.bin;
|
||||
RBinPlugin *plugin = b->cur && b->cur->o ? b->cur->o->plugin : NULL;
|
||||
ut8 is_java = (plugin && strcmp (plugin->name, "java") == 0) ? 1 : 0;
|
||||
return is_java ? b->cur->o->bin_obj : NULL;
|
||||
}
|
||||
|
||||
static void java_update_anal_types(RAnal *anal, RBinJavaObj *bin_obj) {
|
||||
@ -340,23 +346,23 @@ static int java_cmd_ext(RAnal *anal, const char* input) {
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
RAnalPlugin r_anal_plugin_java = {
|
||||
RArchPlugin r_arch_plugin_java = {
|
||||
.name = "java",
|
||||
.desc = "Java bytecode analysis plugin",
|
||||
.license = "Apache",
|
||||
.arch = "java",
|
||||
.bits = 32,
|
||||
.op = &java_op,
|
||||
.opasm = &java_opasm,
|
||||
.cmd_ext = java_cmd_ext,
|
||||
0
|
||||
.bits = R_SYS_BITS_PACK1 (32),
|
||||
.decode = decode,
|
||||
.encode = encode,
|
||||
//.cmd_ext = java_cmd_ext,
|
||||
};
|
||||
|
||||
#ifndef R2_PLUGIN_INCORE
|
||||
R_API RLibStruct radare_plugin = {
|
||||
.type = R_LIB_TYPE_ANAL,
|
||||
.data = &r_anal_plugin_java,
|
||||
.type = R_LIB_TYPE_ARCH,
|
||||
.data = &r_arch_plugin_java,
|
||||
.version = R2_VERSION
|
||||
};
|
||||
#endif
|
@ -1605,7 +1605,6 @@ extern RAnalPlugin r_anal_plugin_arm_gnu;
|
||||
extern RAnalPlugin r_anal_plugin_avr;
|
||||
extern RAnalPlugin r_anal_plugin_dalvik;
|
||||
extern RAnalPlugin r_anal_plugin_gb;
|
||||
extern RAnalPlugin r_anal_plugin_java;
|
||||
extern RAnalPlugin r_anal_plugin_mips_cs;
|
||||
extern RAnalPlugin r_anal_plugin_jdh8;
|
||||
extern RAnalPlugin r_anal_plugin_sh;
|
||||
|
@ -350,6 +350,7 @@ extern RArchPlugin r_arch_plugin_sm5xx;
|
||||
extern RArchPlugin r_arch_plugin_tms320;
|
||||
extern RArchPlugin r_arch_plugin_ppc_cs;
|
||||
extern RArchPlugin r_arch_plugin_i8080;
|
||||
extern RArchPlugin r_arch_plugin_java;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -159,12 +159,12 @@ anal_plugins += [
|
||||
'avr',
|
||||
'dalvik',
|
||||
'gb',
|
||||
'java',
|
||||
'mips_cs',
|
||||
'x86_cs',
|
||||
]
|
||||
|
||||
arch_plugins += [
|
||||
'java',
|
||||
'chip8',
|
||||
'wasm',
|
||||
'i8080',
|
||||
|
@ -58,7 +58,7 @@ RebuildJava() {
|
||||
Rebuild shlr/java
|
||||
Rebuild libr/bin
|
||||
Rebuild libr/asm
|
||||
Rebuild libr/anal
|
||||
Rebuild libr/arch
|
||||
Rebuild libr/core
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user