diff options
Diffstat (limited to 'src/format/elf')
-rw-r--r-- | src/format/elf/elf.c | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/src/format/elf/elf.c b/src/format/elf/elf.c index 4a56c52..64708ee 100644 --- a/src/format/elf/elf.c +++ b/src/format/elf/elf.c @@ -318,6 +318,7 @@ static void g_elf_format_refine_portions(const GElfFormat *format, GBinPortion * const char *background; /* Fond signigicatif */ GBinPortion *new; /* Nouvelle portion définie */ char desc[MAX_PORTION_DESC]; /* Description d'une portion */ + vmpa2t addr; /* Emplacement dans le binaire */ PortionAccessRights rights; /* Droits d'une portion */ elf_shdr strings; /* Section des descriptions */ bool has_strings; /* Section trouvée ? */ @@ -350,10 +351,8 @@ static void g_elf_format_refine_portions(const GElfFormat *format, GBinPortion * g_binary_portion_set_desc(new, desc); - g_binary_portion_set_values(new, - ELF_PHDR(format, phdr, p_offset), - ELF_PHDR(format, phdr, p_filesz), - ELF_PHDR(format, phdr, p_vaddr)); + init_vmpa(&addr, ELF_PHDR(format, phdr, p_offset), ELF_PHDR(format, phdr, p_vaddr)); + g_binary_portion_set_values(new, &addr, ELF_PHDR(format, phdr, p_filesz)); rights = PAC_NONE; if (p_flags & PF_R) rights |= PAC_READ; @@ -398,6 +397,9 @@ static void g_elf_format_refine_portions(const GElfFormat *format, GBinPortion * g_binary_portion_set_desc(new, desc); + init_vmpa(&addr, ELF_SHDR(format, section, sh_offset), ELF_SHDR(format, section, sh_addr)); + g_binary_portion_set_values(new, &addr, ELF_SHDR(format, section, sh_size)); + rights = PAC_NONE; if (sh_flags & SHF_ALLOC) rights |= PAC_READ; if (sh_flags & SHF_WRITE) rights |= PAC_WRITE; @@ -405,11 +407,6 @@ static void g_elf_format_refine_portions(const GElfFormat *format, GBinPortion * g_binary_portion_set_rights(new, rights); - g_binary_portion_set_values(new, - ELF_SHDR(format, section, sh_offset), - ELF_SHDR(format, section, sh_size), - ELF_SHDR(format, section, sh_addr)); - g_binary_portion_include(raw, new); } |