如何获取C函数编译的字节数?

时间:2017-02-26 15:44:17

标签: function gcc

假设我用gcc编译C源代码,是否可以知道每个用户定义函数编译成多少字节?得到的ELF二进制包含函数符号的符号地址(假设二进制文件没有被剥离),但是无论如何都可以检索函数的最后一个字节的地址吗?

我需要这些信息的原因是因为我需要为ELF二进制文件编写一个小的静态混淆器/加密器。反向/反汇编是我目前正在调整的次优解决方案。找到功能结局确实不是一个非常灵活的解决方案。但是,作为编译过程的一部分,gcc可以很容易地将这些信息吐出来。

1 个答案:

答案 0 :(得分:1)

所有编译器都将有关函数大小和其他花絮的信息放在符号表中。使用nm检查此名称列表。例如,要查找main可执行文件的indent函数的大小(不得剥离),请使用

$ nm -AP indent|grep " main "
indent: main T 0000000000401600 000000000000051d

' T'表示文本段中的公共符号。 main函数的长度为0x51d。

您的nm(1)手册页包含所有详细信息。顺便说一句,你也可以在目标文件上运行nm,这些文件通常不会被剥离。