|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
Получить адрес строки Си в HEX (GCC)21.03.2016, 12:38. Показов 3109. Ответов 11
Привет всем.
Появилась необходимость найти адрес строчки Си в скомпилированном файле, желательно HEX. При компиляции проекта линкер может формировать *.elf, *.hex, *.map, *.lss файлы, которые имеют информацию о скомпилированных функциях. Наиболее интересными являются *.elf (с инфой, которую пользует дебаггер), *.map - в которой указаны оффсеты точек входа для всех функций, и *.lss -> дизасм вместе с кодом Си и оффсетами, что немаловажно. Но в *.lss мы имеем соптимизированный код, так что иногда вызываемые строчки иногда не соответствуют ассемблеру, что очень обидно. ... среди утилит GCC есть прога, которая ищет строчку кода Си (имя файла и номер строки) по переданному ей оффсету. Но может быть кто-то знает как сделать наоборот? То есть получить оффсет по строчке? ЗЫ: в GCC дебаггере есть возможность выставлять брейк-поинты по строчкам, чтобы при работе дебаггера программа останавливалась при отладке. Так вот как-то внутри же GCC знает где ему останавливаться? И может быть кто-то получал уже такую информацию?
0
|
|
| 21.03.2016, 12:38 | |
|
Ответы с готовыми решениями:
11
|
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
|
|||
| 21.03.2016, 17:16 | |||
|
с BIN еще можно попробовать но вообще компиляция необратимый процесс, плюс добавь сюда оптимизацию, которая вообще код полностью может перелопатить во первых вся оптимизация выключена, во вторых расставляет метки, в третьих работает практически как транслятор, переводит каждую строчку отдельно стоит только включить релиз режим вся отладка летит в том же VS есть возможность включить в исполняемый код отладочную информацию, тогда IDA пытается восстановить структуру файла, но кроме имен функций и имен классов больше ничего нет, те же имена функций теряется а для чего эта задача?
1
|
|||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||
| 21.03.2016, 17:43 [ТС] | ||
|
ЗЫ: пока остановился на варианте сбора смещений с помощью скриптика из lss-файла. Визуально оффсеты в 99% случаев предшествуют метке сишной строки. Просто я встречал ситуации когда это условие не соблюдается. Но... и 99% случаев - это УЖЕ очень неплохо.
0
|
||
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
|
|||||||||||
| 21.03.2016, 18:04 | |||||||||||
|
могу предложить такой вариант
"отладочная печать" но не совсем
как у микроконтроллеров, кто его знает потом ищешь место где ссылаются на эту строчку, это и будет тестовая функция а после неё или переред ставишь брекпоинт очень удобна в этом случае будет IDA
0
|
|||||||||||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||||||
| 21.03.2016, 20:58 [ТС] | ||||||
|
ValeryS, в том и дело - меня код нельзя. Ну, или в идеальном случае - нельзя.
В принципе, я тут глянул какие файлы формирует CVAVR - ситуация примерно та же. Пример:
Но мне казалось, что подобная таблица соответствий оффсетов - строк существует в файле, и ее чем-то можно выдернуть. Добавлено через 1 минуту PS: выдернуть можно, кстати, перебрав все возможные оффсеты памяти камня и получить строки, соответствующие каждому оффсету ). Для той же Меги8 это всего-то 4к адресов. Но это ж издевательство, особенно, если взять, к примеру, кортексы, у которых адресное поле 32бита ).
0
|
||||||
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
|
||
| 22.03.2016, 09:24 | ||
|
сейчас попробовал такой путь связка протеус-CodeVision в протеус загружаю файл *.cof, потом ставлю точку останова в Сишном листинге, и когда остановится открываю окошко с регистрами и вижу состояния регистра PC так сложно потому, что дизасемблируемого листинга в протеусе не нашел
1
|
||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|||
| 22.03.2016, 10:57 [ТС] | |||
|
0
|
|||
|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
|
| 22.03.2016, 23:02 | |
|
Можно написать простенькую утилиточку, которая будет ручками копаться в бинарнике в поисках строчечки.
Можно в руби или питоне в 10 строчек с использованием регэкспов это дело написать... П.С. А objdump -t... Это, я так понимаю, не то что надо?
1
|
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|||
| 22.03.2016, 23:19 [ТС] | |||
|
0
|
|||
|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
||
| 22.03.2016, 23:22 | ||
P.S. Ага... Прочитал ветку, понял задачу...
0
|
||
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
|
|||||
| 22.03.2016, 23:39 | |||||
![]() я предлагал в протеусе, искать соответствие СИшной строки и значения регистра счетчика команд, то бишь Добавлено через 3 минуты Да кстати ![]() что есть строчка? 1 строка в листинге на Си, оператор 2 строка в стиле Си, сиречь набор символов с 0 в конце я вот подумал про первое,а Mirmik, судя по всему про второе
0
|
|||||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||||
| 23.03.2016, 09:43 [ТС] | ||||
|
ну а насчет
0
|
||||
| 23.03.2016, 09:43 | |
|
Помогаю со студенческими работами здесь
12
Как в AVR-GCC вычислять адрес для in/out?
Динамический двумерный массив (получить адрес первого элемента первой строки) Как записать MAC адрес в HEX файл? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|