Определенно было бы проще, если бы вы могли изменить скрипт компоновщика. Так как вы не можете, возможно извлечь имена разделов, адреса и размеры из двоичного файла программы. Например, вот как можно использовать libbfd для проверки всех разделов кода.
#include <bfd.h>
bfd *abfd;
asection *p;
char *filename = "/path/to/my/file";
if ((abfd = bfd_openr(filename, NULL)) == NULL) {
/* ... error handling */
}
if (!bfd_check_format (abfd, bfd_object)) {
/* ... error handling */
}
for (p = abfd->sections; p != NULL; p = p->next) {
bfd_vma base_addr = bfd_section_vma(abfd, p);
bfd_size_type size = bfd_section_size (abfd, p);
const char *name = bfd_section_name(abfd, p);
flagword flags = bfd_get_section_flags(abfd, p);
if (flags & SEC_CODE) {
printf("%s: addr=%p size=%d\n", name, base_addr, size);
}
}
Если вы хотите посмотреть только на сегмент .text, вы должны указать имя раздела.
Недостатки этого подхода? Libbfd распространяется по лицензии GPL, поэтому весь ваш проект будет обременен лицензией GPL. Для коммерческого проекта это может быть не стартер.
Если ваш бинарный файл в формате ELF, вы можете использовать вместо него libelf. Я не знаком с тем, как работают API-интерфейсы libelf, поэтому не могу предоставить пример кода. Linux libelf также является GPL, но я считаю, что проекты BSD имеют свою собственную libelf, которую вы можете использовать.
Редактировать: , так как вы работаете над DSP в минимальной среде ОС реального времени, этот ответ не сработает. Извините, я пытался.