From f1df6fbca8975ceb0eebd51519eb5f753ff75fa4 Mon Sep 17 00:00:00 2001 From: Yifan Lu Date: Wed, 23 Nov 2016 17:24:50 -0600 Subject: Fixed defination of CC_CBXZ collides with other bits Fixed incorrect pc value in tdctx_to_actx Fixed ARM32 handling of CC_CBXZ (uses incorrect field in ctx->base) Fixed ARM32 transform_dis_branch incorrectly trashing LR for non-call based jumps Fixed ARM32 make_jump_patch not updated to use new assemble_ctx Added new option SUBSTITUTE_RELAXED to relax the disassembly engine Currently SUBSTITUTE_RELAXED only disables TRANSFORM_DIS_REL_JUMPS so jumps at the beginning of functions are allowed --- lib/transform-dis.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'lib/transform-dis.c') diff --git a/lib/transform-dis.c b/lib/transform-dis.c index 4d69da1..20e2dfe 100644 --- a/lib/transform-dis.c +++ b/lib/transform-dis.c @@ -24,6 +24,7 @@ struct transform_dis_ctx { bool force_keep_transforming; bool ban_calls; /* i.e. trying to be thread safe */ + bool ban_jumps; /* allow transforming rel branches at beginning */ void **rewritten_ptr_ptr; void *write_newop_here; @@ -78,7 +79,7 @@ static void transform_dis_branch_top(struct transform_dis_ctx *ctx, } if (cc & CC_CALL) { transform_dis_indirect_call(ctx); - } else { + } else if (ctx->ban_jumps) { transform_dis_ret(ctx); } } @@ -102,6 +103,7 @@ int transform_dis_main(const void *restrict code_ptr, ctx.base.pc = pc_patch_start; ctx.arch = *arch_ctx_p; ctx.ban_calls = options & TRANSFORM_DIS_BAN_CALLS; + ctx.ban_jumps = options & TRANSFORM_DIS_REL_JUMPS; /* data is written to rewritten both by this function directly and, in case * additional scaffolding is needed, by arch-specific transform_dis_* */ ctx.rewritten_ptr_ptr = rewritten_ptr_ptr; -- cgit v1.2.3