воскресенье, 11 января 2015 г.

ELF & DWARF parser

Написал тут по-быстрому (хотя не очень, 4 дня потратил на этот говнокод) на C# библиотеку для чтения ELF файлов и парсинга DWARF4 дебаг информации в ELF файлах.

https://github.com/L-proger/ELFUtils

https://github.com/L-proger/ELFExplorer - GUI приложение, лагучий набросок.

В основном для самообучения, для раскуривания дебаггинга и т.п. но ещё одно интересное для меня применение - напишу вскоре тулзу для вывода подробной инфы о памяти ELF бинарника.  Я довольно часто программирую под микроконтроллеры и как многим известно там есть обычно достаточно большие проблемы с объёмом памяти - как FLASH так и оперативной, потому часто приходится считать байты и стараться сделать бинарник как можно меньше по размеру.


Вот и накидал эту библиотеку. На самом деле всё можно было бы сделать гораздо проще! Использоваться стандартную тулзу тулчейна readelf и, скажем, регулярками разбирать её вывод и получать финальную информацию о символах в бинарнике, но это слишком просто ) А так я разобрался в DWARF формате что меня весьма радует.

Пример вывода консольной версии ниже. Консоль сейчас для простого дебага, я вскоре сделаю красивый удобный гуй для этого всего )   А, да, ещё DLL умеет парсить пока минимально lds скрипты линкера и правильно использовать информацию о секциях памяти для последующего анализа её использования (можно посмотреть сколько % памяти каждого из банков занято и т.п.).


Вывод инфы по секциям памяти.









6 комментариев:

  1. STM32F4, DCMI и USB CDC - камера с консолькой что ли? :)

    ОтветитьУдалить
  2. Камера с USB HS интерфейсом для сливания изображения и потока обработанных на камере данных трекинга )

    ОтветитьУдалить
  3. По CDC решил что проще всего реализовать протокол с командами и сливанием картинки. Что может быть проще COM порта )

    ОтветитьУдалить
    Ответы
    1. У меня первая мысль и была, что это веб-камера по виртуальному ком-порту, потом подумал - да ну нафиг, не может быть :)

      Удалить
    2. Как оказалось (в древние времена этого поста), куда лучше кастомный USB класс запилить. Да и дрова не нужно свои писать. На Windows 8.1+ WinUSB драйвер ставится автоматом (если девайс содержит нужные магические дескрипторый под WinUSB). На Linux/Android так же дров не нужно. Всё из юзер спейса прекрасно делается. И ещё: libusb страшное го*но. В те же времена после кучи найденных косяков (включая НАРУШЕНИЕ порядка пакетов при большой нагрузке) запилили свою либу Счастье, радост по сей день.

      Удалить
  4. Почему не может быть? ) Мне кроме картинки (которая не часто нужна) необходимо слать некоторые обработанные данные. Другого более подходящего стандартного класса не знаю ) А запилить свой класс - хлопотно ибо надо писать драйвер под WIndows + пописывать т.к. целевая платформа 64 битная.

    ОтветитьУдалить