Skip to content

Commit

Permalink
ai
Browse files Browse the repository at this point in the history
  • Loading branch information
radare committed Sep 27, 2024
1 parent 88e2ff3 commit 0738d61
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 2 deletions.
23 changes: 21 additions & 2 deletions libr/main/rapatch2.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@
#include <r_main.h>

static int show_help(int v) {
printf ("Usage: rapatch2 [-R] [origfile] ([patchfile])\n");
printf ("Usage: rapatch2 [-p N] [-sv] [-R] [origfile] ([patchfile])\n");
if (v) {
printf (
" -p N patch level, skip N directories\n"
" -R reverse patch\n"
" -s be silent\n"
" -v show version\n"
);
}
return 1;
Expand All @@ -20,15 +23,25 @@ R_API int r_main_rapatch2(int argc, const char **argv) {
int o;

bool reverse = false;
bool silent = false;
int patchlevel = 0;

r_getopt_init (&opt, argc, argv, "hR");
r_getopt_init (&opt, argc, argv, "hRvsp:");
while ((o = r_getopt_next (&opt)) != -1) {
switch (o) {
case 'h':
return show_help (1);
case 's':
silent = true;
break;
case 'p':
patchlevel = atoi (opt.arg);
break;
case 'R':
reverse = true;
break;
case 'v':
return r_main_version_print ("rapatch2", 0);
default:
return show_help (0);
}
Expand All @@ -47,6 +60,12 @@ R_API int r_main_rapatch2(int argc, const char **argv) {
if (reverse) {
R_LOG_TODO ("reverse patch not yet supported");
}
if (silent) {
R_LOG_TODO ("silent not yet supported");
}
if (patchlevel) {
R_LOG_TODO ("patchlevel not yet supported");
}
const char *r2argv[5] = {
"radare2",
"-qwP",
Expand Down
72 changes: 72 additions & 0 deletions man/rapatch2.1
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
.TH RAPATCH2 1 "rapatch2 tool" "Sep 27, 2024"
.SH NAME
rapatch2 - binary patching utility
.SH SYNOPSIS
.B rapatch2
[-p #] [-R] file patch

.SH DESCRIPTION
rapatch2 is a tool from the radare2 suite designed for binary patching code and data.
.PP
Human friendly text format to apply patches to binary files.
.Pp
It supports a wide range of formats and features, including architecture and
bits specification, delta patching, graph patching, and more.
.Pp
Those patches must be written in files and the syntax looks like the following:

.RS
.nf
^# -> comments
. -> execute command
! -> execute command
OFFSET { code block }
OFFSET "string"
OFFSET 01020304
OFFSET : assembly
+ {code}|"str"|0210|: asm
.fi
.RE

.SH OPTIONS
.TP
.B -h
Show this help message
.TP
.B -R
Reverse patch
.TP
.B -p [num]
Skip num directories from patch file

.TP
.B -s
Be silent

.TP
.B -v
Show version string

.SH USAGE EXAMPLES
.TP
.B "Comparing two binaries"
radiff2 -u bin1 bin2 > patch

rapatch2 -p 1 < patch

.TP
.B "Patch only one file"
rapatch2 bin1 patch

.SH COMMAND IN R2

See the -p flag and command.

.SH SEE ALSO
radare2(1)

.Sh WWW
.Pp
https://www.radare.org/
.SH AUTHOR
pancake <[email protected]>

0 comments on commit 0738d61

Please sign in to comment.