C: Утилита для анализа файлов.obj, чтобы измерить размер некоторых функций в точных байтах?

Мне нужно было найти точный размер байта нескольких функций C. Любая рекомендация любой утилиты, которая может анализировать файлы.obj, сгенерированные компилятором gcc?

1 ответ

Решение

У меня есть только GCC v4 для тестирования, но я не думаю, что эта особенность binutils недавно изменилась.

test.c:

int foo()
{
    return 42;
}

Составитель:

$ gcc -c test.c -o test.o

Разобрал:

$ objdump -D test.o
...
0000000000000000 <foo>:
   0:   55                      push   %rbp
   1:   48 89 e5                mov    %rsp,%rbp
   4:   b8 2a 00 00 00          mov    $0x2a,%eax
   9:   c9                      leaveq
   a:   c3                      retq
...

(Мы видим foo находится по адресу 0 размером 0x000b байт.)

Доказательство в пудинге:

$ nm -S test.o
0000000000000000 000000000000000b T foo

По адресу 0, размер 0x000b. Вот ты где.;-)

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

Другие вопросы по тегам