Skip to content

Commit

Permalink
Initial import of the rapatch2 tool ##shell
Browse files Browse the repository at this point in the history
  • Loading branch information
radare committed Sep 27, 2024
1 parent 71c98b1 commit 88e2ff3
Show file tree
Hide file tree
Showing 11 changed files with 117 additions and 1 deletion.
2 changes: 1 addition & 1 deletion binr/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ BTOP=$(shell pwd)

.PHONY: all clean install install-symlink deinstall uninstall mrproper preload

BINS=r2r r2pm ravc2 rax2 rasm2 rabin2 rahash2 radiff2 radare2 rafind2 rarun2 ragg2 r2agent rasign2
BINS=r2r r2pm ravc2 rax2 rasm2 rabin2 rahash2 radiff2 rapatch2 radare2 rafind2 rarun2 ragg2 r2agent rasign2

LIBR2=$(call libname-version,libr2.$(EXT_SO),${LIBVERSION})

Expand Down
1 change: 1 addition & 0 deletions binr/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ if cli_enabled
subdir('ragg2')
subdir('r2agent')
subdir('radiff2')
subdir('rapatch2')
subdir('rafind2')
subdir('rasign2')
subdir('ravc2')
Expand Down
22 changes: 22 additions & 0 deletions binr/rapatch2/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
BIN=rapatch2

BINDEPS=r_core r_search r_cons r_config
BINDEPS+=r_bin r_debug r_anal r_reg r_bp r_io r_fs
BINDEPS+=r_lang r_asm r_syscall r_main r_util r_esil
BINDEPS+=r_magic r_socket r_flag r_egg r_crypto

include ../rules.mk

ifeq ($(OSTYPE),android)
LDFLAGS+=${DL_LIBS} -lm
endif

include ../../libr/socket/deps.mk
include ../../libr/main/deps.mk
include ../../shlr/zip/deps.mk
include ../../shlr/gdb/deps.mk
include ../../shlr/bochs/deps.mk
include ../../shlr/qnx/deps.mk
include ../../shlr/ar/deps.mk

LDFLAGS+=$(LINK)
19 changes: 19 additions & 0 deletions binr/rapatch2/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
executable('rapatch2', 'rapatch2.c',
include_directories: [platform_inc],
dependencies: [
r_util_dep,
r_main_dep,
r_io_dep,
r_search_dep,
r_cons_dep,
r_core_dep,
r_bin_dep,
r_anal_dep,
r_asm_dep,
r_crypto_dep,
r_config_dep
],
install: true,
install_rpath: rpath_exe,
implicit_include_directories: false
)
7 changes: 7 additions & 0 deletions binr/rapatch2/rapatch2.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
/* radare - LGPL - Copyright 2024 - pancake */

#include <r_main.h>

int main (int argc, const char *argv[]) {
return r_main_rapatch2 (argc, argv);
}
3 changes: 3 additions & 0 deletions libr/core/cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -2880,6 +2880,9 @@ static bool cmd_r2cmd(RCore *core, const char *_input) {
int rc = 0;
if (r_str_startswith (input, "rax2")) {
rc = __runMain (core->r_main_rax2, input);
} else if (r_str_startswith (input, "rapatch2")) {
r_sys_cmdf ("%s", input);
// rc = __runMain (r_main_rapatch2, input);
} else if (r_str_startswith (input, "radare2")) {
r_sys_cmdf ("%s", input);
// rc = __runMain (core->r_main_radare2, input);
Expand Down
1 change: 1 addition & 0 deletions libr/include/r_main.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ R_API int r_main_radiff2(int argc, const char **argv);
R_API int r_main_ragg2(int argc, const char **argv);
R_API int r_main_rasign2(int argc, const char **argv);
R_API int r_main_r2pm(int argc, const char **argv);
R_API int r_main_rapatch2(int argc, const char **argv);

#ifdef __cplusplus
}
Expand Down
1 change: 1 addition & 0 deletions libr/main/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ OBJS+=rasign2.o
OBJS+=rafind2.o
OBJS+=r2agent.o
OBJS+=radiff2.o
OBJS+=rapatch2.o
OBJS+=radare2.o
OBJS+=rahash2.o

Expand Down
1 change: 1 addition & 0 deletions libr/main/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ static RMain foo[] = {
{ "rarun2", r_main_rarun2 },
{ "rasm2", r_main_rasm2 },
{ "ragg2", r_main_ragg2 },
{ "rapatch2", r_main_rapatch2 },
{ "rabin2", r_main_rabin2 },
{ "radare2", r_main_radare2 },
{ "r2", r_main_radare2 },
Expand Down
1 change: 1 addition & 0 deletions libr/main/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ r_main_sources = [
'rafind2.c',
'ragg2.c',
'rahash2.c',
'rapatch2.c',
'rarun2.c',
'rasign2.c',
'rasm2.c',
Expand Down
60 changes: 60 additions & 0 deletions libr/main/rapatch2.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/* radare - LGPL - Copyright 2024 - pancake */

#define R_LOG_ORIGIN "rapatch2"

#include <r_core.h>
#include <r_main.h>

static int show_help(int v) {
printf ("Usage: rapatch2 [-R] [origfile] ([patchfile])\n");
if (v) {
printf (
" -R reverse patch\n"
);
}
return 1;
}

R_API int r_main_rapatch2(int argc, const char **argv) {
RGetopt opt;
int o;

bool reverse = false;

r_getopt_init (&opt, argc, argv, "hR");
while ((o = r_getopt_next (&opt)) != -1) {
switch (o) {
case 'h':
return show_help (1);
case 'R':
reverse = true;
break;
default:
return show_help (0);
}
}

if (argc < 3 || opt.ind + 2 > argc) {
return show_help (0);
}
const char *file = (opt.ind < argc)? argv[opt.ind]: NULL;
const char *patchfile = (opt.ind + 1 < argc)? argv[opt.ind + 1]: NULL;

if (R_STR_ISEMPTY (file) || R_STR_ISEMPTY (patchfile)) {
R_LOG_ERROR ("Cannot open empty path");
return 1;
}
if (reverse) {
R_LOG_TODO ("reverse patch not yet supported");
}
const char *r2argv[5] = {
"radare2",
"-qwP",
patchfile,
file,
NULL
};
r_main_radare2 (5, r2argv);

return 0;
}

0 comments on commit 88e2ff3

Please sign in to comment.