реклама на сайте
подробности

 
 
> abs2bin, Помогите с форматом
Angel D
сообщение Nov 16 2010, 14:43
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 16-11-10
Пользователь №: 60 944



Всем, доброго времени суток!!!
Нужно написать программу для конвертирования формата abs(elf) в bin. Может ли кто-нибудь подсказать структуру файла abs, и в общих чертах рассказать алгоритм написания подобной программы. Заранее благодарен.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Angel D
сообщение Nov 19 2010, 13:58
Сообщение #2





Группа: Новичок
Сообщений: 7
Регистрация: 16-11-10
Пользователь №: 60 944



Вижу, что хотя бы кто-то откликнулся… И то хорошо…

Цитата
а надо ли велосипед изобретать? есть же готовые утилиты конвертирующие в HEX. Ну а там, где HEX - и до bin не далеко ))


Изобретать, таки надо… В HEX родной и смотрим, а за одно и одним глазом в документацию по эльфу…

И, вот что я там увидел…

Допустим у нас есть некий тест TEST_1_1.abs (он прикреплён ). Смотрим на него, например, через Total Commander. Анализируя содержимое и, сопоставляя с написанным в доках по эльфу, приходим к таким результатам:

1) Первые 16 байт, это наш заголовок в котором говориться, что это непосредственно эльф-файл, заточен он под 32-бита, data представлена в виде LSB. И ещё там версия заголовка, которая нам, в принципе, до одного места.

Хорошо, смотрим дальше.

2) Два следующих байта говорят нам, что это исполняемый файл.
3) Следящая пара сообщает, что файл предназначен для «такого-то» железа.
4) Далее, целых четыре байта – «очередная» версия.
5) А вот здесь начинают твориться непонятные штуки. Четыре байта адреса, по которому побежит наша система для запуска процесса. Смотрим по этому адресу (0x400) и видим, что там у нас пустота. То есть всё в нопах вплоть до section header table, который находиться в самом конце файла, как будет понятно далее.
6) В следующих четырёх байтах содержится сдвиг от начала файла, по которому у нас лежит program header table (0x34). А следующие четыре байта говорят, где находиться section header table(0x13D0). Тут всё ясно.
7) Потом четвёрка нулевых байтов. Это флаг, который используется в объектниках.
8) Два байта. Это размер заголовка, в котором мы сейчас роемся(0x34).
9) В следующих двух байтах хранится инфа о размере входа в program header table. Причём все остальные энтры такие же.
10) Два байта, которые говорят нам количество файлов program header таблиц.
11) и 12) тоже самое, что и 9) , 10) но для section header table.
13) Последние два байта эта таблица индексов для section name string table.

Насколько я понял из документации, что для того, чтобы нам вытянуть требуемый .bin, то section header table не нужен. А нужен он лишь при линковке. Поэтому туда я даже не заглядывал (лишь краем глаза).

Взялся за program header table. Смотрю по адресу 0x34:
1) Первые четыре байта это тип сегмента. Как видим он у нас равен 1. Это значит, что сегмент загружаемый.
2) Следующая четвёрка показывает, где у нас находиться начало этого сегмента в файле (0xB0).
3) Четыре байта. Это адрес, по которому должен размещаться сегмент в виртуальной памяти(0x00000000).
4) Далее четыре байта. Физический адрес в памяти (0x00000000).
5) Четыре байта. Размер сегмента в файле (0x00000010).
6) Четыре байта. Размер сегмента в памяти(0x00000010).
7) Четыре байта. Флаг. Что он значит, я не нашёл, но он всё равно в нулях.
8) Последняя четвёрка. Выравнивание в памяти и в файле. У нас равно 0х8.
Далее идёт ещё таблица следующего сегмента. Всё тоже самое, только описываются другие адреса и размеры.
Потом идет, судя по всему какой-то string table. А далее собственно сами сегменты.
В итоге, до чего я додумался. Я просто взял эти два сегмента и поместил их в память, так как они идут в самом файле (таблицу секций в конце я откинул).
Но меня терзают смутные сомнения. Всё ли я сделал правильно. И ещё это адрес входа 0х400… К чему он? Проверить пока что не могу, проблемы с платой. Может ещё с таблицей секций чёто делать надо? Или этот непонятный string table тоже куда-то всунуть?

Цитата
Для раздраконивания elf есть штатная утилита objdump.


Не разраконивается... Не разобрался я в ней... Мрачная она какая-то... Но всё равно спасибо...

Прикрепленные файлы
Прикрепленный файл  TEST_1_1.zip ( 688 байт ) Кол-во скачиваний: 11
 
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 19:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016