Начал разбираться с UDS протоколом. Основной проблемой, для меня, было то, что не было возможности быстро читать большой набор байт за раз. Если читать через ReadMemoryByAddr, то данные получаются не слепком и между запросами проходит большое количество времени. Теперь понял, как это работает:
1. Регистрируем так называемым DID и регистрируем в нем данные для чтения.
2. Читаем память через запрос ReadDataByIdentifier и передаем в него зарегистрированный ранее DID, точнее его идентификатор.
3. Парсим данные по кускам, эта штука уже реализована ранее.
И основной мой затык как раз был связан с пониманием второго пункта. Такое ощущение, что практически никто этот механизм не использует. А без него, частоты снятия логов будет ой как не хватать. Пока набросал на Питоне скрипт для тестов. Если все будет хорошо, то перенесу в комплириемый язык. И добавлю в свою программу возможности логирования ME9.
А следующим этапом будут эксперименты с прошивкой блоков через UDS.
А еще, я понял как широко известный в узких кругах prj ищет переменные блока управления по похожим прошивкам. Он ищет шаблоны использования переменных и производит сопоставление. Если оно найдено, то с вероятностью близкой к 100% можно сказать, что это та же самая переменная. Конечно, он ищет их не руками, а автоматизированнно. Но для меня раньше это было черным ящиком, а тут пришло понимание. Просто ищем обращение к переменной по всей прошивке. И смотрим инструкции вокруг этого обращения. Для распространенных переменных, таких как обороты и прочее, нахождение их происходит со 100% вероятностью. Конечно, что-то редкоиспользуемое можно и не найти.