Как подсчитать использование неопределенных символов в объектном файле?

#eclipse #eclipse-cdt #clang-format #autoformatting #format-conversion

#eclipse #eclipse-cdt #clang-формат #автоформатирование #форматирование-преобразование

Вопрос:

Предположим, я «криминалистически» изучаю объектный файл, который кто-то другой скомпилировал. У меня нет исходного кода, и я также не могу полагаться на символы отладки. Тем не менее, я могу использовать:

 objdump -C -t my_object.o 
| sed -r '/\*UND\*/!d; s/000 s *UND*s 000  //;' 
| sort
 

чтобы получить внешние символы, которые он использует.

Но что, если то, что мне нужно, — это количество использований каждого из этих символов? Есть ли способ получить это, скажем, без сложного разбора дизассемблированного кода?

Примечания:

  • Система GNU (например, Linux)
  • Предположим, что основные инструменты, используемые при разработке программного обеспечения на C , установлены.

Ответ №1:

Для функций вы можете посмотреть количество перемещений, например:

 // test.cc:
void foo();

int main() {
  foo();
  foo();
}
 
 $ c   -c test.cc
$ objdump -r test.o | grep foo
0000000000000005 R_X86_64_PC32     _Z3foov-0x0000000000000004
000000000000000a R_X86_64_PC32     _Z3foov-0x0000000000000004
 

Здесь у нас есть два перемещения, каждое из которых соответствует одному вызову функции.

Комментарии:

1. А как насчет переменных? Или другие символы?

2. Ссылки на глобальные переменные также должны быть в перемещениях.