mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 19:27:45 +00:00
LibELF: Fix unaligned writes in the relocation code
This commit is contained in:
parent
daeb371180
commit
ff292fbe5a
1 changed files with 9 additions and 4 deletions
|
@ -53,10 +53,15 @@ bool perform_relative_relocations(FlatPtr base_address)
|
||||||
#else
|
#else
|
||||||
VERIFY(ELF64_R_TYPE(relocation->r_info) == R_X86_64_RELATIVE);
|
VERIFY(ELF64_R_TYPE(relocation->r_info) == R_X86_64_RELATIVE);
|
||||||
#endif
|
#endif
|
||||||
if (use_addend)
|
auto* patch_address = (FlatPtr*)(base_address + relocation->r_offset);
|
||||||
*(FlatPtr*)(base_address + relocation->r_offset) = base_address + relocation->r_addend;
|
FlatPtr relocated_address;
|
||||||
else
|
if (use_addend) {
|
||||||
*(FlatPtr*)(base_address + relocation->r_offset) += base_address;
|
relocated_address = base_address + relocation->r_addend;
|
||||||
|
} else {
|
||||||
|
__builtin_memcpy(&relocated_address, patch_address, sizeof(relocated_address));
|
||||||
|
relocated_address += base_address;
|
||||||
|
}
|
||||||
|
__builtin_memcpy(patch_address, &relocated_address, sizeof(relocated_address));
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue