Skip to content

Commit f3e6805

Browse files
committed
Add /Rgl command for combined ROP gadget info
- Implements /Rgl command that combines /R and /Rg functionality - Shows both basic gadget info and detailed analysis in one command - Supports standard and JSON output modes - Uses combined RZ_ROP_GADGET_PRINT | RZ_ROP_GADGET_PRINT_DETAIL | RZ_ROP_GADGET_ANALYZE flags Fixes #5389
1 parent 3a41342 commit f3e6805

File tree

4 files changed

+52
-0
lines changed

4 files changed

+52
-0
lines changed

librz/core/cmd/cmd_search.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,24 @@ RZ_IPI RzCmdStatus rz_cmd_detail_gadget_handler(RzCore *core, int argc, const ch
9494
return status;
9595
}
9696

97+
// "/Rgl"
98+
RZ_IPI RzCmdStatus rz_cmd_detail_gadget_long_handler(RzCore *core, int argc, const char **argv, RzCmdStateOutput *state) {
99+
const char *input = argc > 1 ? argv[1] : "";
100+
101+
// Create context with combined flags for long output
102+
RzRopSearchContext *context = rz_core_rop_search_context_new(core, input, false,
103+
RZ_ROP_GADGET_PRINT | RZ_ROP_GADGET_PRINT_DETAIL | RZ_ROP_GADGET_ANALYZE, state);
104+
105+
if (!context) {
106+
return RZ_CMD_STATUS_ERROR;
107+
}
108+
109+
RzCmdStatus status = rz_core_rop_search(core, context);
110+
rz_core_rop_search_context_free(context);
111+
return status;
112+
}
113+
114+
97115
static void cmd_search_bin(RzCore *core, RzInterval itv) {
98116
ut64 from = itv.addr, to = rz_itv_end(itv);
99117
int size; // , sz = sizeof (buf);

librz/core/cmd_descs/cmd_descs.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ static const RzCmdDescArg cmd_info_gadget_args[2];
159159
static const RzCmdDescArg cmd_search_gadget_args[2];
160160
static const RzCmdDescArg cmd_query_gadget_args[2];
161161
static const RzCmdDescArg cmd_detail_gadget_args[2];
162+
static const RzCmdDescArg cmd_detail_gadget_long_args[2];
162163
static const RzCmdDescArg cmd_search_value_args[3];
163164
static const RzCmdDescArg cmd_search_value_alias_v1_args[2];
164165
static const RzCmdDescArg cmd_search_value_alias_v2_args[2];
@@ -2227,6 +2228,21 @@ static const RzCmdDescHelp cmd_detail_gadget_help = {
22272228
.args = cmd_detail_gadget_args,
22282229
};
22292230

2231+
static const RzCmdDescArg cmd_detail_gadget_long_args[] = {
2232+
{
2233+
.name = "Gadget address",
2234+
.type = RZ_CMD_ARG_TYPE_STRING,
2235+
.flags = RZ_CMD_ARG_FLAG_LAST,
2236+
.optional = true,
2237+
2238+
},
2239+
{ 0 },
2240+
};
2241+
static const RzCmdDescHelp cmd_detail_gadget_long_help = {
2242+
.summary = "Gadget detail info in long format (combines /R and /Rg output)",
2243+
.args = cmd_detail_gadget_long_args,
2244+
};
2245+
22302246
static const RzCmdDescHelp slash_v_help = {
22312247
.summary = "Value search.",
22322248
};
@@ -21466,6 +21482,9 @@ RZ_IPI void rzshell_cmddescs_init(RzCore *core) {
2146621482
RzCmdDesc *cmd_detail_gadget_cd = rz_cmd_desc_argv_state_new(core->rcmd, slash_R_cd, "/Rg", RZ_OUTPUT_MODE_STANDARD | RZ_OUTPUT_MODE_JSON, rz_cmd_detail_gadget_handler, &cmd_detail_gadget_help);
2146721483
rz_warn_if_fail(cmd_detail_gadget_cd);
2146821484

21485+
RzCmdDesc *cmd_detail_gadget_long_cd = rz_cmd_desc_argv_state_new(core->rcmd, slash_R_cd, "/Rgl", RZ_OUTPUT_MODE_STANDARD | RZ_OUTPUT_MODE_JSON, rz_cmd_detail_gadget_long_handler, &cmd_detail_gadget_long_help);
21486+
rz_warn_if_fail(cmd_detail_gadget_long_cd);
21487+
2146921488
RzCmdDesc *slash_v_cd = rz_cmd_desc_group_state_new(core->rcmd, slash__cd, "/v", RZ_OUTPUT_MODE_STANDARD | RZ_OUTPUT_MODE_JSON | RZ_OUTPUT_MODE_QUIET | RZ_OUTPUT_MODE_TABLE, rz_cmd_search_value_handler, &cmd_search_value_help, &slash_v_help);
2147021489
rz_warn_if_fail(slash_v_cd);
2147121490
RzCmdDesc *cmd_search_value_alias_v1_cd = rz_cmd_desc_argv_state_new(core->rcmd, slash_v_cd, "/v1", RZ_OUTPUT_MODE_STANDARD | RZ_OUTPUT_MODE_JSON | RZ_OUTPUT_MODE_QUIET | RZ_OUTPUT_MODE_TABLE, rz_cmd_search_value_alias_v1_handler, &cmd_search_value_alias_v1_help);

librz/core/cmd_descs/cmd_descs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ RZ_IPI RzCmdStatus rz_cmd_search_gadget_handler(RzCore *core, int argc, const ch
151151
RZ_IPI RzCmdStatus rz_cmd_query_gadget_handler(RzCore *core, int argc, const char **argv, RzCmdStateOutput *state);
152152
// "/Rg"
153153
RZ_IPI RzCmdStatus rz_cmd_detail_gadget_handler(RzCore *core, int argc, const char **argv, RzCmdStateOutput *state);
154+
// "/Rgl"
155+
RZ_IPI RzCmdStatus rz_cmd_detail_gadget_long_handler(RzCore *core, int argc, const char **argv, RzCmdStateOutput *state);
154156
// "/v"
155157
RZ_IPI RzCmdStatus rz_cmd_search_value_handler(RzCore *core, int argc, const char **argv, RzCmdStateOutput *state);
156158
// "/v1"

librz/core/cmd_descs/cmd_search.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,19 @@ commands:
557557
- name: Gadget address
558558
type: RZ_CMD_ARG_TYPE_STRING
559559
optional: true
560+
561+
- name: "/Rgl"
562+
cname: cmd_detail_gadget_long
563+
summary: Gadget detail info in long format (combines /R and /Rg output)
564+
type: RZ_CMD_DESC_TYPE_ARGV_STATE
565+
modes:
566+
- RZ_OUTPUT_MODE_STANDARD
567+
- RZ_OUTPUT_MODE_JSON
568+
args:
569+
- name: Gadget address
570+
type: RZ_CMD_ARG_TYPE_STRING
571+
optional: true
572+
560573
- name: "/v"
561574
summary: Value search.
562575
subcommands:

0 commit comments

Comments
 (0)