Прошу прощения, уже пятый день напрягаю поисковики, но всегда натыкаюсь на отладку из исходного кода, да еще на отладочной плате. Помогите уже начать отлаживать, а не забивать голову ненужным (пока) материалом. Имею на руках устройство с Cortex-M3 (STM32F207) на борту. Прочитал из него прошивку, с помощью J-Flash (J-Link кабель) через SWD канал. Нужно пошагово походить по ветвлениям прошивки, прямо на этом процессоре, чтобы понять принцип работы. Но исходного кода прошивки нет. Нужно поставить несколько брейкпоинтов и просмотреть содержимое памяти и регистров в этих точках при остановке. Какая среда отладки позволяет отлаживать чистый байт-код, без исходного кода? Сильно не ругайте, я не спец по ARM, только начал их изучать,
Вы хотите сказать, получить СИ-исходный код с помощью ИДА? И не понятно, зачем мне подключать симулятор ARM, если есть готовое устройство и J-Link? Или я все неправильно понял?
почему Си - IDA интерактивный дизассемблер, который широко используется для реверс-инжиниринга. Если "нужно пошагово походить по ветвлениям прошивки", то как это сделать без текста программы, а если текста нет - значит надо дизассаемблировать. Не видел дебагеров шагающих по hex кодам. Еще Keil-у для ARM можно подсунуть "чужой" бинарный файл (или hex), но для прошивки, дизассемблер тоже покажет, но шагать не будет. Давно пробовал, может сейчас что поменялось
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Хорошо а есть возможность менять байты во флеш памяти, во время работы процессора? Зачем мне это, сейчас попробую объяснить. Например Я подключусь к устройству через программу J-Mem. В нужном месте (где хотел поставить брейкпоинт), изменю два байта, чтоб получился переход на самого себя (бесконечный цикл). И когда выполнение байт кода доберется до моего цикла, прочитаю память.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
микроконтроллер может писать во флэш - можно отдельным проектом написать процедурку записи и "попросить" линкер разместить в свободном месте по определенному адресу (где заканчивается основная прошивка), после компиляции вручную соединить две прошивки в hex редакторе. Дебагер не знаю - может ли писать флэш. А почему прямо в прошивке сразу эти 2 байта не поменять редактором hex?
Пока не вижу пути, как всеж дизасемблировать ИДА supports: ARMv7-M: Cortex-M3 (e.g. NXP LPC17xx/18xx/13xx, STM32 F1/F2/L1 series, TI Stellaris, Toshiba TX03/TMPM3xx etc.) Самому скомпилировать, что получилось. Добиться аналогичной работы "своей" программы, потом уже добавлять свое. Нашел http://www.keil.com/support/docs/1936.htm Только там µVision Version 2.12 и слово simulate. У меня 5.14 - не прыгает никак.
1)прошивка в виде файла, я понимаю есть, судя "Прочитал из него прошивку" 2)берем IDApro (на злачных местах есть) 3)открываем прошивку в IDApro, отвечаем там на вопросы и дизассемблируем и сохраняем получившийся ассемблерный текст. 4)в любимом IDE (Keil там, IAR) создаем ассемблерный проект с одним ассемблерным файлом, копируем выше получившийся текст в этот файл, пробуем компилировать, сходу может не получится, правим, добиваемся чтоб скомпилировалось. 5)прошиваем нашей новой прошивкой устройство, убеждаемся что работает 6)теперь в нашем новом проекте можно легко добавлять свои хотелки и дебажить просто тоже
Я пытаюсь запустить отладку, из-за того, что сомневаюсь в правильности дизассемблирования этой прошивки ИДА-ой. К тому-же ИДА очень слабо дружит с Thumb-2 (даже наверное не с Thumb-2, а именно с этим контроллером). Поэтому ее листингу доверять я не могу.
Хотите отладку прошивки? Подключаете ST-Link к МК, запускаете программу STM32 ST-LINK Utility. Подключаетесь к МК и в меню Target открываете окно MCU Core. В нем кликаете по кнопке Step и наблюдаете за работой МК.
ST-Link пока нет, но отлаживать хочется уже сейчас. А разве у J-Link нет такого функционала? Установил ST-Link 4.1.0.0, но не вижу этот Step. Или он появится после коннекта с МК?
Пойду-ка я поизучаю "J-Link Commander" и "J-Link RTT Viewer". В коммандере точно можно брейкпоинты ставить, единственное работать придется в командной строке или по скриптам. Но мне для начала хватит. Если я правильно все понял, то не придется никакую среду, типа Кеил, устанавливать.
Хоспаде.. наплели семь бочек арестантов. Magadan69 уверен у вас сейчас каша в голове. Давайте начнем с терминологии:
То что вы хотите - реверс-инжиниринг. Очень не простоая задача
Байт-код - слово применяемо к промежуточному представлению программы. к примеру Java программы находятся именно в этом состоянии (https://ru.wikipedia.org/wiki/Байт-код). Давайте о нем забудем. То что вы подразумевали будем называть Прошивкой/Фирмварью/хексом/бинарем (4)
1) Исходный код - надеюсь тут вопросов нету, С/С++, asm, или что-угодно 2) Объектные файлы - то что получили в результате компиляции(!) пример: *.o 3) Исполняемые файлы - то, что получили в результате линковки(!) пример: *.exe, *.dll, *.elf, *.so 4) Прошивка - бинарное представление программы, что можно залито непосредственно в камень (микроконтроллер) и прочитано из него. примеры: *.bin, *.hex
Собственно, у вас нету пунктов [1;3]. Есть только 4. Если при сборке был флаг -g, то пунк 3 будет содержать в себе всю дебаг информацию (пути к файлам, символы и тд). его можно "полноценно" дебажить
То, что вы хотите сделать software developer'ы называют Debug. для этого есть Debug'еры (gdb например). Это очередная грамма которая контролирует исполнение вашей программы ( debug(myprogramm()) ) Как происходит процесс дебага на вашем десктопе? К примеру накидали вы hello world. скомпили. слинковали. запустили под дебагером. Дебагер получает от вас команды "шаг. стоп. run. и тд" он же может и модифицировать код/перменные!
Ситуация с микрокнтроллером чуть сложнее. Потмоу что мы делаем cross-компиляцию. То есть на x86 машине м собираем код для ARMv7-M. Соответсвенно в случае отладки у нас так же - cross-debug. Здесь трабла - отладчик то не запустить на x86, он же ARM... Но тут нас спасает gdb! Он ведь умеет в remote. То есть у нас есть две сущности: 1) gdbserver - собственно ваш отладчик (j-link, st-link, etc.) и ваш камень с прошивкой 2) gdb client - то, что подключится к серверу и будет посылать команды
Тут есть варианты выбора, CMD, Keil, IAR и всё такое. Лично я эти виндовые проприретарные вещи ненавижу. Так что опишу вообще Unix'овый подход
Как: 1) вам надо запустить gdbserver. Открываем консоль и скорее всего будет так openocd -f interface/jlink.cfg -f target/stm32f1x.cfg - собственно в таргете - и есть ваш камень (семейство) 2) клиент. Опять же - консоль и arm-none-eabi-gdb здесь же target remote :3333
и всё - можно апсчаться
Но есть одна загвоздочка.... Микроконтроллер вещь противная с флеш-памятью. и прошивка живет во флеше. Как все мы знаем, во флешку можно писать побайтно, стирать - только страницей. Значит если вы хотите поменять хотя бы 1 бит с 0->1 то придется теперь всю страницу.
Поэтмоу я б рекомендовал вам не заморачивать с пошаговой отладкой, а, как писали выше. Выкачать прошивку. Взять IDA и уже там модифицировать прошивку (ида это умеет) и дальше - заливать и смотреть что происходит. Благо у арма есть bkpt инструкция
Надеюсь вы сможете оценить сложность данной процедуры и напишете код с 0, а не будете пытаться реверсить не понимая что там внутри....
Спасибо за ликбез !!! (действительно спасибо, так как сложно было уложить понятия в голове). Но я все-таки должен понять алгоритм "...4) Прошивки...", которая "*.bin". К тому-же мне не нужна вся прошивка, мне нужно понять только несколько функций. В частности надо разобраться какие команды и с какими параметрами принимает АРМ по блютуз (не все), чтобы самому управлять устройством. Переписывать данные во флеш я не буду (я не буду использовать софтварные брейкпоинты), мне достаточно шести железных брейкпоинтов, которые можно устанавливать в контроллере, J-Mem - просмотровика памяти, и того что АРМ-контроллер выдает значения своих регистров при остановке (halt). Я в принципе уже разобрал две функции (ида не ошиблась, но зато я теперь точно это знаю). Одно не удобно, работа с командной строкой в "J-Link Commander". Надо будет посмотреть на "openocd" и "arm-none-eabi-gdb" если они позволяют дебажить "...4) Прошивка...", то будет великолепно. Хоть немного автоматизирую процесс. А то обидно получается когда прошел уже немало кода вручну, остановился на брейкпоинте , и например, вместо команды "regs" наберешь команду "go", случайно по запарке.
В частности надо разобраться какие команды и с какими параметрами принимает АРМ по блютуз (не все), чтобы самому управлять устройством.
блютуз внешний модуль или внутри кристалла? Если внешний - можно к RX ноге через переходник USB-COM компьютерным терминалом подцепиться и смотреть. Если внутренний - пробовать сниферить через компьютерный блютуз тем же терминалом.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения