Skip to content
Snippets Groups Projects
Commit f326b4ff authored by whh8b's avatar whh8b
Browse files

Fix bug that caused rewrite lengths to be incomplete.

parent 2c1f3641
No related branches found
No related tags found
No related merge requests found
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment