C: Утилита для анализа файлов .obj, чтобы измерить размер некоторых функций в точных байтах? - PullRequest
1 голос
/ 25 февраля 2011

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

1 Ответ

4 голосов
/ 25 февраля 2011

У меня есть только 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. Вот ты где. ; -)

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

...