Сейчас на форуме: Rio, tyns777, zombi-vadim (+5 невидимых)

 eXeL@B —› Программирование —› ELF- вопрос по формату файла ( REL RELA секции)
Посл.ответ Сообщение

Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 05 апреля 2015 16:21
· Личное сообщение · #1

Доброго времени суток! Появилась проблема, для одной из задач появилась потребность в парсинге структуры эльф файла (да. я Делфист. и делаю парсер на Делфи) в общем - то шло все гладко, пока не добрался до ( REL RELA секции). Конкретно проблема выглядит так.. что часть данные в бинарнике забиты нулями, НО когда ИДА проводит декомпиль, эти места уже проинициализированны данными. Роюсь уже 2ой день. Я никак не могу догнать, как связываются данные секций релоков с данными из проги.
Ссылки на инфу приветствуются. Может даже правильные запросы в гугл помогут.

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 05 апреля 2015 17:35
· Личное сообщение · #2

ничего не понял но оставлю --> Link <--

Добавлено спустя 11 минут
можешь у ильфака в sdk посмотреть, там чтение ELF в соурсах есть



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 05 апреля 2015 17:56 · Поправил: VodoleY
· Личное сообщение · #3

reversecode пишет:
там чтение ELF в соурсах есть

а носом тыкнуть можешь? я туда никогда не лазил.. elf.ldw декомпилить желания нету.. или в ПМ линку на вычитыватель закинуть.. чтото я совсем подзакипел на этом моменте.. вобщем надо связка секций с артибутом SHT_RELA=4 SHT_REL=9. типа переменщаемые смещения и обьекты и их взаимодействия с остальными данными
стуктуры вроде простенькие.. но как их связать с данными ума не приложу пока что
SHT_REL: данные типа..
+00h dd r_offset;
+04h dd r_info;
SizeOf = 08h
---
SHT_RELA: данные типа..
+00h dd r_offset;
+04h dd r_info;
+08h dd r_addend;
SizeOf = 0Ch

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 05 апреля 2015 17:57
· Личное сообщение · #4

idasdk66.zip:\idasdk66\ldr\elf

Добавлено спустя 1 минуту
elf.ldw в полном объеме нет, но то что есть в соурсах должно быть достаточно

Добавлено спустя 7 минут
--> Link <--
в конце статьи линки на
--> Link <--
--> Link <--



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 05 апреля 2015 18:09 · Поправил: VodoleY
· Личное сообщение · #5

http://zalexf.narod.ru/texts-elf.htm

самое вминяемое описание ельф формата.. причем на русском
http://geezer.osdevbrasil.net/osd/exec/elf.txt
тоже ничего.. только чисто текст.. но убило сразу то ради чего искал..
1ая строчка
xxx - this document does not yet cover dynamic linking and relocation

Добавлено спустя 4 минуты
ссылки эти я уже находил.. не вошло...

http://prntscr.com/6pvgf2
вот скрин с hiew если так комуто будет понятней.

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 05 апреля 2015 18:13
· Личное сообщение · #6

--> Link <--
там тоже про стуктуру релокайшин вроде описано




Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 05 апреля 2015 19:58 · Поправил: hors
· Личное сообщение · #7

VodoleY пишет:
как их связать с данными ума не приложу пока что
SHT_REL: данные типа..
+00h dd r_offset;
+04h dd r_info;
SizeOf = 08h


r_offset В данном случае речь идет о виртуальном адресе.
r_info Отсюда берется тип перемещения и индекс в таблице символов.

Тип это первый байт, индекс все остальное.

Чтобы узнать из какой секции брать таблицу символов, то смотрите sh_link("Link" на Вашем скриншоте).

-----
http://ntinfo.biz




Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 06 апреля 2015 07:11
· Личное сообщение · #8

hors пишет:
r_offset В данном случае речь идет о виртуальном адресе.
r_info Отсюда берется тип перемещения и индекс в таблице символов.

Тип это первый байт, индекс все остальное.

Чтобы узнать из какой секции брать таблицу символов, то смотрите sh_link("Link" на Вашем скриншоте).

все вы верно говорите. только пока что мазаика не складывается. Кстати.. если комуто понадобится, при парсинге таблицы символов выяснилась одна замечательная весч. Имена как бы поджаты. т.е если у вас в программе присутсвуют 2 переменых VarVarName и VarName , то им в таблице имен будет соответствовать 1 запись VarVarName ,0 . НО при парсинге таблицы символов будет 2 записи 1ая будет указателем на начало строки, 2ая на 3 символа дальше, таким образом получим 2 разных имени

Добавлено спустя 1 минуту
это я к чему веду.. что парсинг голой таблицы имен, вобщемто относительно бесполезное занятие, без учета символьной таблицы

Добавлено спустя 4 часа 25 минут
фу блин.. мать перемать.. сошлось.. тему пока закрывать не буду, может ктото еще полезных ссылок накидает.. по сабжу.. те линки которые помогли

http://em386.blogspot.com/2006/10/resolving-elf-relocation-name-symbols.html
http://docs.oracle.com/cd/E23824_01/html/819-0690/chapter6-54839.html
https://www.freebsd.org/cgi/man.cgi?query=elf(5)&sektion=
http://stackoverflow.com/questions/16847741/processing-elf-relocations-understanding-the-relocs-symbols-section-data-an

возможно это я такой тупой.. но както залип. всем спасибо. если хватить духу.. может даже по русски описание выложу

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....



 eXeL@B —› Программирование —› ELF- вопрос по формату файла ( REL RELA секции)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати