summaryrefslogtreecommitdiff
path: root/src/format/elf/symbols.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-03-29 17:24:22 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-03-29 17:24:22 (GMT)
commit52e036040b5e0ad8acde3d467ac8d9ca43ed414c (patch)
tree9f869999534857786fc8e0870772d8e5cabef2fb /src/format/elf/symbols.c
parent057cee1c3c109639af8f30e39e00f4884a353f31 (diff)
Used real virtual addresses when describing ELF items.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@496 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/format/elf/symbols.c')
-rw-r--r--src/format/elf/symbols.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/format/elf/symbols.c b/src/format/elf/symbols.c
index 03812f1..b57c601 100644
--- a/src/format/elf/symbols.c
+++ b/src/format/elf/symbols.c
@@ -252,10 +252,10 @@ static bool load_all_elf_basic_entry_points(GElfFormat *format)
elf_dyn item_b; /* Second élément DYNAMIC */
const bin_t *content; /* Contenu binaire à lire */
off_t length; /* Taille totale du contenu */
+ bool status; /* Bilan d'une opération */
off_t pos; /* Tête de lecture courante */
uint32_t virt_32; /* Adresse virtuelle sur 32b */
uint64_t virt_64; /* Adresse virtuelle sur 64b */
- bool status; /* Bilan d'une opération */
/* Point d'entrée principal éventuel */
@@ -308,8 +308,10 @@ static bool load_all_elf_basic_entry_points(GElfFormat *format)
content = G_BIN_FORMAT(fmt)->content;
length = G_BIN_FORMAT(fmt)->length;
- if (!translate_address_into_offset_using_elf_programs(fmt, ELF_DYN(fmt, *ar, d_un.d_val), &pos))
- return;
+ status = g_exe_format_translate_address_into_offset(G_EXE_FORMAT(format),
+ ELF_DYN(fmt, *ar, d_un.d_val),
+ &pos);
+ if (!status) return;
if ((pos + ELF_DYN(fmt, *sz, d_un.d_val)) < length)
length = pos + ELF_DYN(fmt, *sz, d_un.d_val);
@@ -373,7 +375,11 @@ static bool load_all_elf_basic_entry_points(GElfFormat *format)
if (find_elf_dynamic_item_from_pheader(format, &dynamic, DT_PLTGOT, &item_a))
{
- if (translate_address_into_offset_using_elf_programs(format, ELF_DYN(format, item_a, d_un.d_val), &pos))
+ status = g_exe_format_translate_address_into_offset(G_EXE_FORMAT(format),
+ ELF_DYN(format, item_a, d_un.d_val),
+ &pos);
+
+ if (status)
{
content = G_BIN_FORMAT(format)->content;
length = G_BIN_FORMAT(format)->length;