Allow for ELF files without program headers e.g. unlinked object files.
This commit is contained in:
parent
7e414f8576
commit
faeab33375
@ -290,6 +290,12 @@ static int elf_patch_read_program_headers(elfpatch_handle_t *ep)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (header_count == 0) {
|
||||||
|
/* No program headers found. This ELF file is probably not linked */
|
||||||
|
ep->program_headers_count = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
ep->program_headers = (GElf_Phdr *)malloc(header_count * sizeof(GElf_Phdr));
|
ep->program_headers = (GElf_Phdr *)malloc(header_count * sizeof(GElf_Phdr));
|
||||||
if (!ep->program_headers) {
|
if (!ep->program_headers) {
|
||||||
/* Mem error. Abort. Program will crash eventually */
|
/* Mem error. Abort. Program will crash eventually */
|
||||||
@ -335,9 +341,11 @@ static void resolve_section_lmas(elfpatch_handle_t *ep)
|
|||||||
if (!sec)
|
if (!sec)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/* By default each sections LMA is assumed to be its LMA as well */
|
||||||
|
sec->lma = (uint64_t)sec->section_header.sh_addr;
|
||||||
|
|
||||||
if (sec->section_header.sh_type == SHT_NOBITS) {
|
if (sec->section_header.sh_type == SHT_NOBITS) {
|
||||||
/* Section does not contain data. It may be allocated but is not loaded. Therefore, LMA=VMA. */
|
/* Section does not contain data. It may be allocated but is not loaded. Therefore, LMA=VMA. */
|
||||||
sec->lma = (uint64_t)sec->section_header.sh_addr;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user