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. Вот ты где.;-)
Однако будьте осторожны с тем, что вы хотите сделать с этими числами. Это правильный размер функции, но для правильной работы функции может потребоваться больше (например, глобальные объекты данных).