diff options
| author | Cyrille Bagard <nocbos@gmail.com> | 2019-01-08 22:29:47 (GMT) | 
|---|---|---|
| committer | Cyrille Bagard <nocbos@gmail.com> | 2019-01-08 22:29:47 (GMT) | 
| commit | 2ed3c9274c8dafb660bc25743a1aac7c72c12965 (patch) | |
| tree | e3f20c5ebfe947163442144aba29a1d62462ac7d /plugins/arm/v7 | |
| parent | 8f77fd4f0a73a92087b185af0b45d70607268107 (diff) | |
Marked the ARMv7 branch instructions with the LR register as return points.
Diffstat (limited to 'plugins/arm/v7')
| -rw-r--r-- | plugins/arm/v7/link.c | 12 | ||||
| -rw-r--r-- | plugins/arm/v7/opdefs/A8827_bx.d | 4 | ||||
| -rw-r--r-- | plugins/arm/v7/opdefs/A8828_bxj.d | 14 | 
3 files changed, 28 insertions, 2 deletions
diff --git a/plugins/arm/v7/link.c b/plugins/arm/v7/link.c index 4a63890..e30b0c1 100644 --- a/plugins/arm/v7/link.c +++ b/plugins/arm/v7/link.c @@ -62,7 +62,17 @@ void handle_armv7_conditional_branch_from_register(GArchInstruction *instr, GArc          g_arch_instruction_set_flag(instr, AIF_RETURN_POINT);      else -        g_arch_instruction_set_flag(instr, AIF_RETURN_POINT);   /* FIXME : jump inconnu ! */ +    { +        /** +         * On fait un saut mais on ne sait pas vers où ! +         * +         * Dans tous les cas, le flot d'exécution ne continue pas naturellement +         * vers l'instruction suivante, donc on marque le branchement comme +         * étant un point de retour. +         */ +        g_arch_instruction_set_flag(instr, AIF_RETURN_POINT); + +    }      g_object_unref(G_OBJECT(reg)); diff --git a/plugins/arm/v7/opdefs/A8827_bx.d b/plugins/arm/v7/opdefs/A8827_bx.d index 64ad628..337728f 100644 --- a/plugins/arm/v7/opdefs/A8827_bx.d +++ b/plugins/arm/v7/opdefs/A8827_bx.d @@ -52,6 +52,7 @@  	@hooks {  		fetch = help_fetching_with_instruction_bx_from_thumb +		link = handle_armv7_conditional_branch_from_register  	} @@ -83,7 +84,8 @@  	@hooks { -		fetch = help_fetching_with_instruction_bx_from_thumb +		fetch = help_fetching_with_instruction_bx_from_arm +		link = handle_armv7_conditional_branch_from_register  	} diff --git a/plugins/arm/v7/opdefs/A8828_bxj.d b/plugins/arm/v7/opdefs/A8828_bxj.d index 7c6ddb5..f3a1bb7 100644 --- a/plugins/arm/v7/opdefs/A8828_bxj.d +++ b/plugins/arm/v7/opdefs/A8828_bxj.d @@ -49,6 +49,13 @@  	} +	@hooks { + +		fetch = help_fetching_with_instruction_bx_from_thumb +		link = handle_armv7_conditional_branch_from_register + +	} +  }  @encoding (A1) { @@ -75,5 +82,12 @@  	} +	@hooks { + +		fetch = help_fetching_with_instruction_bx_from_arm +		link = handle_armv7_conditional_branch_from_register + +	} +  }  | 
