Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Attempt to skip string detection during ptr printing. #4917

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 4 additions & 4 deletions librz/arch/data.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion librz/core/canalysis.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion librz/core/cmd/cmd_analysis.c
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down
4 changes: 2 additions & 2 deletions librz/core/disasm.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand Down
4 changes: 2 additions & 2 deletions librz/include/rz_analysis.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 <rz_cons.h>
Expand Down
Loading