From 3b9e823db7ed5a159bd73e610b31b8252522ca04 Mon Sep 17 00:00:00 2001 From: Zhang Zengbo Date: Wed, 20 Jul 2022 17:09:50 +0800 Subject: [PATCH] ARM pseudo subvar: don't substitude [pc, reg] --- librz/parse/p/parse_arm_pseudo.c | 22 +++++++++++++--------- test/db/analysis/thumb | 2 +- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/librz/parse/p/parse_arm_pseudo.c b/librz/parse/p/parse_arm_pseudo.c index e4f0a2142a..021dbffdec 100644 --- a/librz/parse/p/parse_arm_pseudo.c +++ b/librz/parse/p/parse_arm_pseudo.c @@ -290,16 +290,20 @@ static bool subvar(RzParse *p, RzAnalysisFunction *f, RzAnalysisOp *op, char *da if (!ripend) { ripend = "]"; } - if (neg) { - repl_num -= rz_num_get(NULL, neg + 1); - } else { - repl_num += rz_num_get(NULL, rip); + const char *maybe_num = neg ? neg + 1 : rip; + maybe_num = rz_str_trim_head_ro(maybe_num); + if (rz_is_valid_input_num_value(NULL, maybe_num)) { + if (neg) { + repl_num -= rz_num_get(NULL, maybe_num); + } else { + repl_num += rz_num_get(NULL, maybe_num); + } + rip -= 3; + *rip = 0; + tstr_new = rz_str_newf("%s0x%08" PFMT64x "%s", tstr, repl_num, ripend); + free(tstr); + tstr = tstr_new; } - rip -= 3; - *rip = 0; - tstr_new = rz_str_newf("%s0x%08" PFMT64x "%s", tstr, repl_num, ripend); - free(tstr); - tstr = tstr_new; } } diff --git a/test/db/analysis/thumb b/test/db/analysis/thumb index 243370e5e2..818da30e9e 100755 --- a/test/db/analysis/thumb +++ b/test/db/analysis/thumb @@ -11,7 +11,7 @@ pdr~case EOF EXPECT=<