我正在Linux上用gcc编译一个简单的c文件,并使用readelf查找符号的信息。函数名(可能还有其他符号-我没有检查)被修剪为25个字符。
有没有办法告诉编译器/链接器保留更长的符号?
版本:
1.编译器:GCC(GCC)4.8.5 20150623(红帽4.8.5-44)
<prompt>$ cat test_long_fnames_in_elf.c
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
void verly_long_function_xjsakdghajkshdlasjkldashjkldhasjklfdsjkhfsdjkhfsdjklhdsjkl_v1(uint32_t val)
{
int i = 0;
for (i = 0 ; i < val; i++)
{
printf("%d\n", i);
}
}
void verly_long_function_xjsakdghajkshdlasjkldashjkldhasjklfdsjkhfsdjkhfsdjklhdsjkl_v2(uint32_t val)
{
int i = 0;
for (i = 0 ; i < val; i++)
{
printf("This is i = %d\n", i);
}
}
int main()
{
verly_long_function_xjsakdghajkshdlasjkldashjkldhasjklfdsjkhfsdjkhfsdjklhdsjkl_v1(5);
verly_long_function_xjsakdghajkshdlasjkldashjkldhasjklfdsjkhfsdjkhfsdjklhdsjkl_v2(5);
}
<prompt>$ gcc test_long_fnames_in_elf.c -g -o test_long_fnames_in_elf.elf <prompt>$ readelf -a te.elf | grep long
<prompt>$ readelf -a test_long_fnames_in_elf.elf | grep long
41: 0000000000000000 0 FILE LOCAL DEFAULT ABS test_long_fnames_in_elf.c
52: 000000000040052d 61 FUNC GLOBAL DEFAULT 13 verly_long_function_xjsak <-- Function symbol is trimmed
62: 000000000040056a 61 FUNC GLOBAL DEFAULT 13 verly_long_function_xjsak <-- Function symbol is trimmed
<prompt>$
2条答案
按热度按时间piwo6bdm1#
有没有办法告诉编译器/链接器保留更长的符号?
编译器 * 保留了 * 较长的符号,但
readelf
不显示它们。下面是我的系统上的输出,使用
binutils-2.39
中的readelf
:比较对象:
fhity93d2#
使用objdump。谢谢Craig Estey