Например TDA7294

Форум РадиоКот • Просмотр темы - Си (С++) и автоматический поиск зависимостей при компиляции.
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб авг 23, 2025 19:17:32

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Си (С++) и автоматический поиск зависимостей при компиляции.
СообщениеДобавлено: Пн фев 03, 2025 14:51:38 
Родился

Зарегистрирован: Пн фев 03, 2025 14:24:16
Сообщений: 4
Рейтинг сообщения: 0
Есть задача кое-что дешифровать.
Есть способ это сделать - готовое устройство где дешифровка работает.
Есть полные исходники прошивки этого устройства, поэтому захотелось извлечь код дешифровки из этих исходников.

Первое, что пришло в голову - проанализировать исходники и перенести код в свою программу.
Но исходники крайне запутанные - например, структура содержит в себе другие структуры и типы, которые в свою очередь ссылаются на другие структуры и типы, и всё это расползается на десятки уровней вложенности в нескольких сотнях файлов.

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

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

Вот не верится, что ничего подобного никто не делал, потому прошу подсказать правильное направление.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Си (С++) и автоматический поиск зависимостей при компиля
СообщениеДобавлено: Пн фев 03, 2025 19:45:40 
Говорящий с текстолитом

Карма: -9
Рейтинг сообщений: 175
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1532
Рейтинг сообщения: 0
Вот и возник вопрос - а нет ли какой системы сборки, которой указываешь директорию где лежат все чужие исходники, а она анализирует твой собственный код и, встретив там неизвестную ещё зависимость, сама ищет в указанной директории и всех поддиректориях нужные .h заголовки?
Вы хотите собрать в единый файл всё, что подключается при помощи #include что-ль?
Так это просто - найдите и активируйте в своём компиляторе в свойствах проекта ключ, разрешающий сохранение результатов работы препроцессора в файлы.
В IAR-е это - галка "Preprocessor output to file" в разделе "Препроцессор". .i-файлы появятся там же, где и листинги.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Си (С++) и автоматический поиск зависимостей при компиля
СообщениеДобавлено: Пн фев 03, 2025 22:08:03 
Родился

Зарегистрирован: Пн фев 03, 2025 14:24:16
Сообщений: 4
Рейтинг сообщения: 0
jcxz писал(а):
Вы хотите собрать в единый файл всё, что подключается при помощи #include что-ль?

Благодарю за наводку, но ведь собираться будет то, о чём препроцессор знает. А тут задача сложнее на мой взгляд.

Вот это определено в одном .h

Код:
typedef struct SampleString SampleString;

А вот это в другом .h

Код:
struct SampleString {
    string_tip string;
};

А вот это уже в третьем .h

Код:
typedef struct string_str {
  string_union_cttp uni;
  char *ptr;
} string_tip[1];

А вот это уже в четвёртом .h

Код:
typedef union string_union_uni {
  string_heap_cttp heap1;
  string_stack_cttp stack1;
} string_union_cttp;

А string_heap_cttp и string_stack_cttp уже в пятом .h - и так далее до хрен пойми какого уровня вложенности - десятки точно, а может и сотни.

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

Вот и получается, чтобы всё это раскопать нужно:

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

И вот делать всё это вручную оказалось очень и очень затруднительно - хотелось бы автоматизировать. Это что касается самой задачи.


А что касается Вашего совета включить "галочку" - она ведь сработает, если препроцессор пробежится по уже вписанным include, убедится что да, все объявления имеются и уже потом сложит все их в нужное место, так? Препроцессор ведь не будет сам рыскать по десяткам директорий и перебирать сотни .h файлов, чтобы определить нужные, он ведь будет искать нужные определения в уже указанных ему инклюдах, а нужно, чтобы он искал везде, куда сможет дотянуться - с указанной директории и в её глубины.

Может такими способностями вдруг обладают какие-то системы сборки - CMake, Meson, какая-то ещё?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Си (С++) и автоматический поиск зависимостей при компиля
СообщениеДобавлено: Пн фев 03, 2025 22:17:00 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 38
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
6797 писал(а):
- найти поиском по содержимому все .h файлы, где нужный неизвестный тип упоминается;
откройте все файлы сразу в notepad++, а в окне поиска нажмите "найти во всех открытых документах", и свободно переключайтесь между вкладками.
За одно и подсветку синтаксиса настройте.

Добавлено after 1 minute 28 seconds:
Re: Си (С++) и автоматический поиск зависимостей при компиляции.
кстати, иде не пользуюсь, из notepad-а компилятор запускаю


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Си (С++) и автоматический поиск зависимостей при компиля
СообщениеДобавлено: Пн фев 03, 2025 22:30:42 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 43
Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 436
Рейтинг сообщения: 0
И конечно в каждом таком .h файле объявления не только перечисленных выше типов и переменных, а ещё и других - размеры каждого .h от единиц килобайт до десятков килобайт, а объём всей уже скомпилированной прошивки устройства под мегабайт.

Зачем вам все это если найти нужно код дешифровки? Ищите функции с подходящими именами и содержимым. Или вы знаете где он, просто нужно вытащить из кода все нужное? Ну и переходите в IDE от типа к типу, там должно быть что-то типа "Go To Definition", у меня VS по F12 прыгает.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Си (С++) и автоматический поиск зависимостей при компиля
СообщениеДобавлено: Пн фев 03, 2025 22:45:14 
Родился

Зарегистрирован: Пн фев 03, 2025 14:24:16
Сообщений: 4
Рейтинг сообщения: 0
Зачем вам все это если найти нужно код дешифровки? Ищите функции с подходящими именами и содержимым.

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

Если бы было так просто - найти функцию дешифровки и десяток типов с ней связанных - я бы эту тему не создавал, но там жуткая лапша намотана. А само устройство, к слову, на FreeRTOS крутится.

Добавлено after 2 minutes 20 seconds:
Или вы знаете где он, просто нужно вытащить из кода все нужное? Ну и переходите в IDE от типа к типу, там должно быть что-то типа "Go To Definition", у меня VS по F12 прыгает.

Ну да, разве что попробовать действительно в Visual Studio запрыгнуть, может поможет. А то я что-то всё командными строками рулю. Спасибо.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Си (С++) и автоматический поиск зависимостей при компиля
СообщениеДобавлено: Вт фев 04, 2025 03:42:41 
Говорящий с текстолитом

Карма: -9
Рейтинг сообщений: 175
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1532
Рейтинг сообщения: 0
Препроцессор ведь не будет сам рыскать по десяткам директорий и перебирать сотни .h файлов, чтобы определить нужные, он ведь будет искать нужные определения в уже указанных ему инклюдах, а нужно, чтобы он искал везде
Честно говоря не понял - зачем везде??? Ведь исходники у вас собираются? Так? А если так, то значит все необходимые типы подключаются препроцессором. Зачем тогда ещё и ненужный мусор тянуть? После препроцессора в файле будут только нужные .h собраны.

А искать везде, это кроме того что, бесполезно, так ещё и вредно. Ну вот найдёте вы в сторонней папке например некую DataStruct. И у вас используется DataStruct. Но ведь это может быть совершенно другая DataStruct. С таким же именем. Которая просто не подключена includ-ами. Потому и не конфликтует. Т.е. - на ровном месте создали себе же лишние проблемы.
Опять же - есть ещё пространства имён (namespace). Если они используются у вас. Как будете вручную отслеживать их влияние?
Также имена типов могут создаваться с помощью макросов. Вручную, текстовым поиском вы такие типы не найдёте.

Вы хотите выполнить работу препроцессора вручную. Это почти то же самое, что вручную на бумажке скомпилировать си-код. Вселенная не оценит подвига. :)))
Закат Солнца вручную. :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Си (С++) и автоматический поиск зависимостей при компиля
СообщениеДобавлено: Вт фев 04, 2025 05:33:12 
Родился

Зарегистрирован: Пн фев 03, 2025 14:24:16
Сообщений: 4
Рейтинг сообщения: 0
jcxz, я согласен и, кажется, Ваше решение должно сработать или хотя бы облегчить решение.

Теперь бы найти как этот вывод препроцессора включить с Visual Studio Code и clang. Больше часа гуглю и не могу понять.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Си (С++) и автоматический поиск зависимостей при компиля
СообщениеДобавлено: Ср фев 05, 2025 16:30:25 
Держит паяльник хвостом
Аватар пользователя

Карма: 16
Рейтинг сообщений: 198
Зарегистрирован: Вс дек 02, 2012 16:58:33
Сообщений: 924
Откуда: от туда
Рейтинг сообщения: 0
Быстрый поиск гуглом дал ответ для GCC, возможно для clang будет также:
Получить препроцессированый файл, использую компилятор GCC можно, добавив в его вызов параметры '-E -o имя_файла.i'.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: muravei_ и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y