Bugfix: Fix broken segment table. Manually enforce original layout
This commit is contained in:
parent
baa34c7525
commit
dafd51a376
@ -232,6 +232,9 @@ static int elf_patch_update_info(elfpatch_handle_t *ep)
|
|||||||
{
|
{
|
||||||
Elf_Kind ek;
|
Elf_Kind ek;
|
||||||
const char *type_string = "unrecognized";
|
const char *type_string = "unrecognized";
|
||||||
|
size_t header_count = 0ull;
|
||||||
|
GElf_Phdr phdr;
|
||||||
|
size_t i;
|
||||||
|
|
||||||
ret_val_if_ep_err(ep, -1001);
|
ret_val_if_ep_err(ep, -1001);
|
||||||
|
|
||||||
@ -273,7 +276,19 @@ static int elf_patch_update_info(elfpatch_handle_t *ep)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Get program headers */
|
||||||
|
if ( elf_getphdrnum(ep->elf, &header_count) != 0) {
|
||||||
|
print_err("Error reading count of program headers: %s\n", elf_errmsg(-1));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0ull; i < header_count; i++) {
|
||||||
|
if (gelf_getphdr(ep->elf, (int)i, &phdr) != &phdr) {
|
||||||
|
print_err("Error reading program header (%zu): %s\n", i, elf_errmsg(-1));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
print_debug("Read program header %zu\n", i);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -305,6 +320,9 @@ elfpatch_handle_t *elf_patch_open(const char *path, bool readonly)
|
|||||||
goto close_fd;
|
goto close_fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Prewvent Libelf from relayouting the sections, which would brick the load segments */
|
||||||
|
elf_flagelf(ep->elf, ELF_C_SET, ELF_F_LAYOUT);
|
||||||
|
|
||||||
if (elf_patch_update_info(ep)) {
|
if (elf_patch_update_info(ep)) {
|
||||||
print_err("File malformatted. Cannot use for CRC patching\n");
|
print_err("File malformatted. Cannot use for CRC patching\n");
|
||||||
goto close_elf;
|
goto close_elf;
|
||||||
|
Loading…
Reference in New Issue
Block a user