Я пытаюсь создать программу покрытия линий в Python.
Цель состоит в том, чтобы получить список компьютеров из теста, запущенного на устройстве, и получить информацию о том, какие функции, условия и линии FW указанного устройства были охвачены тестом.
Указанное устройство имеет процессор AR C, если это помогает.
У меня есть двоичные файлы ELF и исходный код (написанный на C), но не могу поделиться ими здесь (конфиденциальная информация о компании).
Я взял файл ELF и сумел получить разборку раздела .text (по сути, это код сборки программы).
Я разобрал FW устройства, поэтому я разобрал FW следующим образом:
P C: hex_opcode assembly_command operands
вот так:
0x100: 7eff mov a, b
Кроме того, используя pyelftools от Eli Bendersky: https://github.com/eliben/pyelftools
Мне удалось получить исходный файл и строку номер начала функции, поэтому я ч Ave удалось сопоставить код сборки каждой функции с источником.
И используя High P C и Low P C из функций, мне удалось связать ПК из журналов испытаний с функциями.
Но теперь я застрял, пытаясь сопоставить отдельные сборочные линии к их расположению в C исходном коде.
Я знаю, что для этого мне нужно прочитать информацию в .debug_line в DWARF, но я не совсем понимаю ее.
Мне удалось встретиться с этим:
https://wiki.osdev.org/DWARF
Где они говорят: Линия + = База линии + (Код операции - База кода операции)% Диапазон линии
У меня есть вся информация, кроме Line и Opcode.
Под "Line" они подразумевают начальную строку в функции? (например, если в источнике файла находится «void fun c ()». c строка 5) Предыдущая строка?
А по «коду операции» это основной код операции команды сборки? Или полный код команды сборки (например, 0x7eff в двоичном представлении) Что-то еще? Некоторые другие коды операций из информации DWARF?
Расчет, насколько я понял, выполняется в десятичном формате, поэтому код операции должен быть преобразован в десятичный.
Заранее спасибо за помощь.
Вадим