Skip to content
Merged
Show file tree
Hide file tree
Changes from 36 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
0160e6d
Corrected branch conflicts
Arya-1-HR Nov 8, 2025
d908b22
Update librz/core/cmd/cmd_eval.c
Arya-1-HR Nov 10, 2025
c614b22
Update librz/core/cmd/cmd_eval.c
Arya-1-HR Nov 10, 2025
cf73f3a
Update librz/core/cmd_descs/cmd_descs.h
Arya-1-HR Nov 10, 2025
69fc683
Merge branch 'dev' into dev
Arya-1-HR Nov 10, 2025
502b143
Merge branch 'rizinorg:dev' into dev
Arya-1-HR Nov 10, 2025
1154b4f
Mixted linter check correction
Arya-1-HR Nov 11, 2025
cb5708b
Merge branch 'rizinorg:dev' into dev
Arya-1-HR Nov 11, 2025
99233a5
Merge branch 'rizinorg:dev' into dev
Arya-1-HR Nov 13, 2025
9bd8172
Merge branch 'rizinorg:dev' into dev
Arya-1-HR Nov 21, 2025
381e7c7
Merge branch 'rizinorg:dev' into dev
Arya-1-HR Dec 3, 2025
0df2503
Merge branch 'rizinorg:dev' into dev
Arya-1-HR Dec 6, 2025
3782ff8
Merge branch 'rizinorg:dev' into dev
Arya-1-HR Dec 8, 2025
aa8f485
Merge branch 'rizinorg:dev' into dev
Arya-1-HR Dec 8, 2025
438aee5
Merge branch 'rizinorg:dev' into dev
Arya-1-HR Dec 9, 2025
2df044a
Merge branch 'rizinorg:dev' into dev
Arya-1-HR Dec 9, 2025
ef6870d
Merge branch 'rizinorg:dev' into new-axtl
Arya-1-HR Dec 10, 2025
9d0d70d
Merge branch 'rizinorg:dev' into new-axtl
Arya-1-HR Dec 11, 2025
1846796
New axtl command
Arya-1-HR Dec 11, 2025
bbf1d81
scr.utf8 removed
Arya-1-HR Dec 11, 2025
5d20b6a
Output mode long
Arya-1-HR Dec 12, 2025
44ee4f6
fix output mode
Arya-1-HR Dec 12, 2025
ca37c71
utf8
Arya-1-HR Dec 13, 2025
a27ea5f
Merge branch 'rizinorg:dev' into new-axtl
Arya-1-HR Dec 13, 2025
c04b5b0
Merge branch 'rizinorg:dev' into new-axtl
Arya-1-HR Dec 14, 2025
552d667
space removed
Arya-1-HR Dec 14, 2025
a59c072
Handled leaks
Arya-1-HR Dec 14, 2025
aa970f1
leaks fix
Arya-1-HR Dec 15, 2025
5ea99bd
Merge branch 'rizinorg:dev' into new-axtl
Arya-1-HR Dec 15, 2025
ecbd3a9
leaks fix
Arya-1-HR Dec 15, 2025
3193bf5
Merge branch 'rizinorg:dev' into new-axtl
Arya-1-HR Dec 15, 2025
0ee693b
Merge branch 'rizinorg:dev' into new-axtl
Arya-1-HR Dec 16, 2025
020fc91
utf8
Arya-1-HR Dec 16, 2025
70205f8
utf8
Arya-1-HR Dec 16, 2025
d14bade
test
Arya-1-HR Dec 16, 2025
4e49001
Merge branch 'rizinorg:dev' into new-axtl
Arya-1-HR Dec 16, 2025
3f28c09
Merge branch 'rizinorg:dev' into new-axtl
Arya-1-HR Dec 17, 2025
4225034
readded test
Arya-1-HR Dec 17, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 60 additions & 3 deletions librz/core/cmd/cmd_analysis.c
Original file line number Diff line number Diff line change
Expand Up @@ -2886,11 +2886,68 @@ static void xrefs_to_list_handler(RzCore *core, RzList /*<RzAnalysisXRef *>*/ *l
}
}

static bool display_xref_list_handler(RzCore *core, int argc, const char **argv, int n_bytes, int n_instrs, RzCmdStateOutput *state) {
RzAnalysisXRef *xref;
RzList *xref_list = rz_analysis_xrefs_get_to(core->analysis, core->offset);
RzListIter *iter;
RzCoreDisasmOptions disasm_options = {
.cbytes = false,
};
int context_bytes = n_bytes;
int context_instrs = n_instrs;
bool utf8 = rz_config_get_b(core->config, "scr.utf8");
rz_list_foreach (xref_list, iter, xref) {
context_instrs = -6;
rz_cons_printf("\n");
if (utf8) {
rz_cons_printf(";––––––––––––––––––––––––––––––––––––––––––\n");
} else {
rz_cons_printf(";------------------------------------------\n");
}
RzAnalysisFunction *fcn = rz_analysis_get_fcn_in(core->analysis, xref->from, 0);
char *fnc_sig = rz_analysis_function_get_signature(fcn);
if (fnc_sig) {
rz_cons_println(fnc_sig);
} else {
rz_cons_println("(UNKNOWN)");
}
rz_cons_printf("; Xref from: %s @ 0x%08" PFMT64x "\n", fcn ? fcn->name : "(unknown)", xref->from);
ut64 offset = rz_core_backward_offset(core, xref->from, &context_bytes, &context_instrs);
ut8 *buf = RZ_NEWS0(ut8, n_bytes + 1);
if (!buf) {
RZ_LOG_ERROR("Failed to allocate memory\n");
rz_list_free(xref_list);
free(fnc_sig);
return false;
}
if (!rz_io_read_at_mapped(core->io, offset, buf, context_bytes + 1)) {
RZ_LOG_ERROR("Failed to read chunk of size 0x%" PFMT64x " at 0x%" PFMT64x " for disassembly.\n", (ut64)(n_bytes + 1), offset);
rz_list_free(xref_list);
free(fnc_sig);
free(buf);
return false;
}
rz_core_print_disasm(core, offset, buf, context_bytes, context_instrs, state, &disasm_options);
free(fnc_sig);
free(buf);
}
rz_list_free(xref_list);
return true;
}

RZ_IPI RzCmdStatus rz_analysis_xrefs_to_list_handler(RzCore *core, int argc, const char **argv, RzCmdStateOutput *state) {
RzCmdStatus status = RZ_CMD_STATUS_OK;
RzList *list = rz_analysis_xrefs_get_to(core->analysis, core->offset);
xrefs_to_list_handler(core, list, state);
rz_list_free(list);
if (state->mode == RZ_OUTPUT_MODE_LONG) {
int n_instrs = -6;
int n_bytes = 64;
if (!display_xref_list_handler(core, argc, argv, n_bytes, n_instrs, state)) {
return RZ_CMD_STATUS_ERROR;
}
} else {
RzList *list = rz_analysis_xrefs_get_to(core->analysis, core->offset);
xrefs_to_list_handler(core, list, state);
rz_list_free(list);
}
return status;
}

Expand Down
1 change: 1 addition & 0 deletions librz/core/cmd_descs/cmd_analysis.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1698,6 +1698,7 @@ commands:
- RZ_OUTPUT_MODE_STANDARD
- RZ_OUTPUT_MODE_JSON
- RZ_OUTPUT_MODE_QUIET
- RZ_OUTPUT_MODE_LONG
args: []
- name: axf
summary: List xrefs from current seek
Expand Down
2 changes: 1 addition & 1 deletion librz/core/cmd_descs/cmd_descs.c
Original file line number Diff line number Diff line change
Expand Up @@ -22443,7 +22443,7 @@ RZ_IPI void rzshell_cmddescs_init(RzCore *core) {
RzCmdDesc *analysis_xrefs_list_cd = rz_cmd_desc_argv_state_new(core->rcmd, ax_cd, "axl", RZ_OUTPUT_MODE_STANDARD | RZ_OUTPUT_MODE_JSON | RZ_OUTPUT_MODE_QUIET, rz_analysis_xrefs_list_handler, &analysis_xrefs_list_help);
rz_warn_if_fail(analysis_xrefs_list_cd);

RzCmdDesc *analysis_xrefs_to_list_cd = rz_cmd_desc_argv_state_new(core->rcmd, ax_cd, "axt", RZ_OUTPUT_MODE_STANDARD | RZ_OUTPUT_MODE_JSON | RZ_OUTPUT_MODE_QUIET, rz_analysis_xrefs_to_list_handler, &analysis_xrefs_to_list_help);
RzCmdDesc *analysis_xrefs_to_list_cd = rz_cmd_desc_argv_state_new(core->rcmd, ax_cd, "axt", RZ_OUTPUT_MODE_STANDARD | RZ_OUTPUT_MODE_JSON | RZ_OUTPUT_MODE_QUIET | RZ_OUTPUT_MODE_LONG, rz_analysis_xrefs_to_list_handler, &analysis_xrefs_to_list_help);
rz_warn_if_fail(analysis_xrefs_to_list_cd);

RzCmdDesc *analysis_xrefs_from_list_cd = rz_cmd_desc_argv_state_new(core->rcmd, ax_cd, "axf", RZ_OUTPUT_MODE_STANDARD | RZ_OUTPUT_MODE_JSON | RZ_OUTPUT_MODE_QUIET, rz_analysis_xrefs_from_list_handler, &analysis_xrefs_from_list_help);
Expand Down
33 changes: 33 additions & 0 deletions test/db/cmd/cmd_ax
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,36 @@ EXPECT=<<EOF
6295544
EOF
RUN

NAME=axtl
FILE=bins/elf/analysis/x86-helloworld-gcc
CMDS=<<EOF
aa
s 0x08048370
axtl
EOF
EXPECT=<<EOF

;------------------------------------------
void entry.init0();
; Xref from: entry.init0 @ 0x080483f2
| : 0x080483ec xchg ebp, eax
| : 0x080483ed add al, 0x08
| : 0x080483ef call eax
| : 0x080483f1 leave
| `=< 0x080483f2 jmp sym.register_tm_clones
0x080483f7 nop

;------------------------------------------
void entry.init0();
; Xref from: entry.init0 @ 0x080483f8
| `==< 0x080483f2 jmp sym.register_tm_clones
: 0x080483f7 nop
\ `=< 0x080483f8 jmp sym.register_tm_clones
0x080483fd nop
0x080483ff nop
; DATA XREF from entry0 @ 0x8048317
/ int main(int argc, char **argv, char **envp);
| 0x08048400 push ebp
EOF
RUN
Loading