LINUX.ORG.RU

Отделить .data от .code


0

1

Выручай, лор.
Есть прошивка для mcu. Код и данные могут быть намешаны рядом друг с другом. Часть .data можно выделить по невалидным опкодам. Вопрос: как выделять .data, если у нее валидный опкод внутри.


руками

anonymous ()

ida вроде бы, точно не помню, брал точку входа и парсил опкоды, анализируя бранчи. Все, что в бранчи не попало — значит данные. Он только под х86 был, но идея довольно простая имхо.

arturpub ★★ ()

Хрен поймешь, про что ты вообще спрашиваешь

Что такое .code? Если ты про секцию elf файла .text, то есть objcopy. Если у тебя есть нужные binutils

anonymous ()
Ответ на: комментарий от arturpub

Госпаде, почему лорОВЦЫ всегда советуют дикое наркоманство?

anonymous ()

только анализ. есть ida free/demo и есть radare2. но если mcu у тебя не arm то ida free/demo в пролете.

exception13 ★★★★★ ()
Ответ на: Хрен поймешь, про что ты вообще спрашиваешь от anonymous

вангую что у него голый бинарик. тут тебе никаких заголовков и отладочной информации в принципе. но зная адрес размещения бинаря в памяти и точку входа можно прогнать анализ и получить примерную карту распределения кода и данных.

exception13 ★★★★★ ()

модель и архитектуру хотя бы назови проца

Harald ★★★★★ ()
Ответ на: комментарий от exception13

Ну раз он сказал .data, то это намек на ELF, как я понял. Только секции .code в ELF нет, лол. Тогда можно, если нужных binutils нет, взять какую-нибудь нормальную библиотеку для работы с elf и с помощью неё выделить, что надо.

Хотя может у него совсем какой-нибудь закопиращеный формат, тогда я хз. Вопрос просто суперски поставлен

anonymous ()
Ответ на: комментарий от exception13

это сиране sonix sn8. Заголовок есть с минимальной инфой.
Как прогнать анализ, если есть регистр PC(program count) его могут менять все инструкции, jmp&call на любой адрес, 9 инструкций (с условием), прыгающие через 1 инструкцию.

parrto ()
Ответ на: комментарий от parrto

С динамическими джампами ничего не сделаешь, halting problem же. Еще можно подумать об эмуляции и нахождении всех кодопутей статистически, гоняя прогу во всех режимах, но это прямая дорога в наркодиспансер.

А много ли там реально динамических? Если не очень, то несколько скрытых точек входа можно найти руками, не самомодификация же там в конце концов.

arturpub ★★ ()
Ответ на: комментарий от arturpub

а, лол, дошло. Там одна инструкция всего подгружает данные в память. Ну и нужно смотреть откуда она загружает, то и есть .data

parrto ()
Ответ на: комментарий от anonymous

.code и .data абстрактные понятия в дизассемблере и не привязаны к конкретному формату объектного или бинарного кода.

exception13 ★★★★★ ()
Ответ на: комментарий от arturpub

С динамическими джампами ничего не сделаешь, halting problem же. Еще можно подумать об эмуляции и нахождении всех кодопутей статистически, гоняя прогу во всех режимах, но это прямая дорога в наркодиспансер.

тут JTAG сильно выручает например. даже если лень анализировать лапшу то можно например натравить вачпоинт на интересующие регистры периферии, нарисовать скрипт и невозбрано дампить данные. правда у меня на пару строк неведомого OLED дисплея на SPI ушло часа 3

exception13 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.