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