mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 19:27:44 +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
|
||||
VERIFY(ELF64_R_TYPE(relocation->r_info) == R_X86_64_RELATIVE);
|
||||
#endif
|
||||
if (use_addend)
|
||||
*(FlatPtr*)(base_address + relocation->r_offset) = base_address + relocation->r_addend;
|
||||
else
|
||||
*(FlatPtr*)(base_address + relocation->r_offset) += base_address;
|
||||
auto* patch_address = (FlatPtr*)(base_address + relocation->r_offset);
|
||||
FlatPtr relocated_address;
|
||||
if (use_addend) {
|
||||
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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue