From 233572545fcd00ea394d35dcbe5ba870e44b6e75 Mon Sep 17 00:00:00 2001 From: Rot127 Date: Wed, 19 Feb 2025 09:24:56 -0500 Subject: [PATCH] Attempt to skip string detection during ptr printing. --- librz/arch/data.c | 8 ++++---- librz/core/canalysis.c | 2 +- librz/core/cmd/cmd_analysis.c | 2 +- librz/core/disasm.c | 4 ++-- librz/include/rz_analysis.h | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/librz/arch/data.c b/librz/arch/data.c index 4911816e62f..5ee1ac48a61 100644 --- a/librz/arch/data.c +++ b/librz/arch/data.c @@ -247,7 +247,7 @@ RZ_API void rz_analysis_data_free(RZ_NULLABLE RzAnalysisData *d) { * * \return On success a valid pointer, otherwise NULL. */ -RZ_API RZ_OWN RzAnalysisData *rz_analysis_data(RZ_NONNULL RzAnalysis *analysis, ut64 addr, RZ_NONNULL const ut8 *buf, size_t size, int wordsize) { +RZ_API RZ_OWN RzAnalysisData *rz_analysis_data(RZ_NONNULL RzAnalysis *analysis, ut64 addr, RZ_NONNULL const ut8 *buf, size_t size, int wordsize, bool check_strings) { rz_return_val_if_fail(analysis && buf, NULL); ut64 dst = 0; @@ -305,7 +305,7 @@ RZ_API RZ_OWN RzAnalysisData *rz_analysis_data(RZ_NONNULL RzAnalysis *analysis, return rz_analysis_data_new(addr, RZ_ANALYSIS_DATA_INFO_TYPE_POINTER, dst, buf, word); } } - if (get_string(buf, size, &dstr, encoding, big_endian)) { + if (check_strings && get_string(buf, size, &dstr, encoding, big_endian)) { RzAnalysisData *ad = rz_analysis_data_new_string(addr, buf, dstr); rz_detected_string_free(dstr); return ad; @@ -329,7 +329,7 @@ RZ_API RZ_OWN RzAnalysisData *rz_analysis_data(RZ_NONNULL RzAnalysis *analysis, * * \return The data kind. */ -RZ_API RzAnalysisDataKind rz_analysis_data_kind(RZ_NONNULL RzAnalysis *a, ut64 addr, RZ_NONNULL const ut8 *buf, size_t len) { +RZ_API RzAnalysisDataKind rz_analysis_data_kind(RZ_NONNULL RzAnalysis *a, ut64 addr, RZ_NONNULL const ut8 *buf, size_t len, bool check_strings) { rz_return_val_if_fail(a && buf, RZ_ANALYSIS_DATA_KIND_UNKNOWN); size_t inv = 0; @@ -342,7 +342,7 @@ RZ_API RzAnalysisDataKind rz_analysis_data_kind(RZ_NONNULL RzAnalysis *a, ut64 a if (str && !buf[i]) { str++; } - RzAnalysisData *data = rz_analysis_data(a, addr + i, buf + i, len - i, 0); + RzAnalysisData *data = rz_analysis_data(a, addr + i, buf + i, len - i, 0, check_strings); if (!data) { i += word; continue; diff --git a/librz/core/canalysis.c b/librz/core/canalysis.c index 80e4f8642ae..d761ef2134f 100644 --- a/librz/core/canalysis.c +++ b/librz/core/canalysis.c @@ -2462,7 +2462,7 @@ RZ_API void rz_core_analysis_data(RZ_NONNULL RzCore *core, ut64 addr, ut32 count rz_core_seek(core, addr, true); for (ut32 i = 0, j = 0; j < count; j++) { - d = rz_analysis_data(core->analysis, addr + i, buf + i, count - i, wordsize); + d = rz_analysis_data(core->analysis, addr + i, buf + i, count - i, wordsize, true); if (!d) { i += word; continue; diff --git a/librz/core/cmd/cmd_analysis.c b/librz/core/cmd/cmd_analysis.c index 4317a1ad78f..accb5c6665a 100644 --- a/librz/core/cmd/cmd_analysis.c +++ b/librz/core/cmd/cmd_analysis.c @@ -6197,7 +6197,7 @@ RZ_IPI RzCmdStatus rz_analysis_data_function_gaps_handler(RzCore *core, int argc RZ_IPI RzCmdStatus rz_analysis_data_kind_handler(RzCore *core, int argc, const char **argv) { RzAnalysisDataKind kind = rz_analysis_data_kind(core->analysis, - core->offset, core->block, core->blocksize); + core->offset, core->block, core->blocksize, true); switch (kind) { case RZ_ANALYSIS_DATA_KIND_INVALID: rz_cons_println("invalid"); diff --git a/librz/core/disasm.c b/librz/core/disasm.c index d229b8c519c..4299abcf87b 100644 --- a/librz/core/disasm.c +++ b/librz/core/disasm.c @@ -3987,7 +3987,7 @@ static void ds_print_ptr(RzDisasmState *ds, int len, int idx) { msg2 = calloc(sizeof(char), len); rz_io_read_at(core->io, n, (ut8 *)msg2, len - 1); msg2[len - 1] = 0; - data_kind = rz_analysis_data_kind(core->analysis, refaddr, (const ut8 *)msg2, len - 1); + data_kind = rz_analysis_data_kind(core->analysis, refaddr, (const ut8 *)msg2, len - 1, false); if (data_kind == RZ_ANALYSIS_DATA_KIND_STRING) { rz_str_filter(msg2); if (*msg2) { @@ -4094,7 +4094,7 @@ static void ds_print_ptr(RzDisasmState *ds, int len, int idx) { ds_print_str(ds, msg, len, refaddr); string_printed = true; } - data_kind = rz_analysis_data_kind(core->analysis, refaddr, (const ut8 *)msg, len - 1); + data_kind = rz_analysis_data_kind(core->analysis, refaddr, (const ut8 *)msg, len - 1, true); if (data_kind == RZ_ANALYSIS_DATA_KIND_STRING && !string_printed && print_msg) { ds_print_str(ds, msg, len, refaddr); } else if (data_kind == RZ_ANALYSIS_DATA_KIND_INVALID) { diff --git a/librz/include/rz_analysis.h b/librz/include/rz_analysis.h index 6f9ff25f5fb..3fd480f1c92 100644 --- a/librz/include/rz_analysis.h +++ b/librz/include/rz_analysis.h @@ -2073,8 +2073,8 @@ typedef enum { RZ_ANALYSIS_DATA_KIND_DATA, } RzAnalysisDataKind; -RZ_API RZ_OWN RzAnalysisData *rz_analysis_data(RZ_NONNULL RzAnalysis *analysis, ut64 addr, RZ_NONNULL const ut8 *buf, size_t size, int wordsize); -RZ_API RzAnalysisDataKind rz_analysis_data_kind(RZ_NONNULL RzAnalysis *a, ut64 addr, RZ_NONNULL const ut8 *buf, size_t len); +RZ_API RZ_OWN RzAnalysisData *rz_analysis_data(RZ_NONNULL RzAnalysis *analysis, ut64 addr, RZ_NONNULL const ut8 *buf, size_t size, int wordsize, bool check_strings); +RZ_API RzAnalysisDataKind rz_analysis_data_kind(RZ_NONNULL RzAnalysis *a, ut64 addr, RZ_NONNULL const ut8 *buf, size_t len, bool check_strings); RZ_API RzAnalysisData *rz_analysis_data_new(ut64 addr, RzAnalysisDataInfoType type, ut64 n, const ut8 *buf, int len); RZ_API void rz_analysis_data_free(RZ_NULLABLE RzAnalysisData *d); #include