From f326b4ff591e6e23f08a96f748e18cd12ef5c9e4 Mon Sep 17 00:00:00 2001 From: whh8b <whh8b@git.zephyr-software.com> Date: Wed, 11 May 2016 18:17:55 +0000 Subject: [PATCH] Fix bug that caused rewrite lengths to be incomplete. --- mixr/mixr.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mixr/mixr.c b/mixr/mixr.c index 915e348..e77d843 100644 --- a/mixr/mixr.c +++ b/mixr/mixr.c @@ -490,6 +490,7 @@ void mixr_do_rw(uint64_t dollop_start, struct rw_table_entry rw_entry) uint32_t rw32_val; uint64_t rw48_val; uint64_t rw64_val; + int rewrite_length = 0; #if DEBUG print_str_debug("Abs "); @@ -509,30 +510,35 @@ void mixr_do_rw(uint64_t dollop_start, struct rw_table_entry rw_entry) { rw8_val = rw_entry.absolute_value-next_pc_address; rw_val = (void*)&rw8_val; + rewrite_length = 1; break; } case 0x1: { rw16_val = rw_entry.absolute_value-next_pc_address; rw_val = (void*)&rw16_val; + rewrite_length = 2; break; } case 0x3: { rw32_val = rw_entry.absolute_value-next_pc_address; rw_val = (void*)&rw32_val; + rewrite_length = 4; break; } case 0x5: { rw48_val = rw_entry.absolute_value-next_pc_address; rw_val = (void*)&rw48_val; + rewrite_length = 6; break; } case 0x7: { rw64_val = rw_entry.absolute_value-next_pc_address; rw_val = (void*)&rw64_val; + rewrite_length = 8; break; } } @@ -546,7 +552,7 @@ void mixr_do_rw(uint64_t dollop_start, struct rw_table_entry rw_entry) _mprotect((void*)(((uintptr_t)relative)&PAGE_MASK), PAGE_SIZE + PAGE_SIZE, PROT_READ|PROT_EXEC|PROT_WRITE); - _memcpy((void*)relative, rw_val, rw_entry.rewrite_length); + _memcpy((void*)relative, rw_val, rewrite_length); _mprotect((void*)(((uintptr_t)relative)&PAGE_MASK), PAGE_SIZE + PAGE_SIZE, PROT_READ|PROT_EXEC); -- GitLab